XScript マニュアル · Chapter 30

STR — 文字列関数

STR は文字列のパース・変換・検索ユーティリティをまとめたグローバルオブジェクトです。 プロトコルフレームのパース、注文番号の分離、レシピ文字列の処理で最も頻繁に呼び出されます。

基本例

xscript
string data = "    abc d   ";
Log("[{0}] => Trim = [{1}]", data, STR.Trim(data));
 
data = "12";
int dataToInt = STR.ParseToInt(data);
Log("[{0}] => ParseToInt = [{1}]", data, dataToInt);
 
data = "12.3";
dataToInt = STR.ParseToInt(data, 0);
Log("[{0}] => ParseToInt = [{1}]", data, dataToInt);
 
data = "abc:123";
string name;
string value;
STR.ParseNameValue(data, name, value, ":");
Log("[{0}] => ParseNameValue = [{1},{2}]", data, name, value);
 
int pos = STR.IndexOf(data, ":");
string tail = STR.Substring(data, pos + 1);

実践例 — レシピのパース

xscript
// recipe = "1:50,3:20.3,7:60.1"
array items = STR.ParseCommaString(recipe);
 
if (items.Count == 0)
{
    return -1;
}
 
int unitNo;
double target;
 
for (i, 0, items.Count - 1)
{
    if (STR.ParsePairIntDouble(items[i], unitNo, target, ":") == false)
    {
        return -1;
    }
    if (unitNo == targetUnit)
    {
        return target;
    }
}

主なメソッド

基本

シグネチャ説明
int Length(string text)長さ
string Trim(string text)両端の空白を除去
string ToUpper(string text) / string ToLower(string text)大・小文字
string Replace(string text, string oldValue, string newValue)置換
bool IsNullOrWhiteSpace(string text)空/空白かどうか
bool Contains(string text, string value)含むか
bool StartsWith(string text, string value) / EndsWith接頭/接尾

検索 · 抽出

シグネチャ説明
int IndexOf(string text, string value)最初の位置
int IndexOf(string text, string value, int startIndex)開始位置指定
int NthIndexOf(string text, string value, int n)N 番目の位置
string Substring(string text, int startIndex)末尾まで切り出し
string Substring(string text, int startIndex, int length)長さ指定

パース

シグネチャ説明
array ParseCommaString(string commaString)CSV 分割
array ParseSplitString(string text, string splitString)任意の区切り文字で分割
bool ParseNameValue(string text, ref string name, ref string value, string delim)name/value ペア分離
bool ParsePairIntDouble(string text, ref int first, ref double second, string delim)key:value 整数·実数
bool ParsePairStrings(string text, ref string first, ref string second)文字列ペア
int ParseToInt(string text) / ParseToInt(string text, int defaultValue)整数変換
double ParseToDouble(string text) / ParseToDouble(string text, double defaultValue)実数変換

ファイル

シグネチャ説明
array ReadAllLines(string path, bool addLog = true)ファイル → 行配列

ヒント

  • 外部プロトコルのパースは ParseCommaString の後に ParsePairIntDouble / ParsePairStrings で 細分化する 2 段階分離パターンが安定します。
  • ParseToInt の第 2 引数にデフォルト値を渡せば、例外なく安全に変換できます。
  • $"..." 補間文字列があり FormatString より可読性が高いですが、複雑なロケール·フォーマットは SYS.GetDateTimeStringFormat のようなヘルパを使用します。

STR 全関数リファレンス(XUtilString)

C# ソース基準 — スクリプトから直接呼べるすべての関数。

パース(Name=Value · Pair)

関数意味
STR.GetName(text, delim='=')name=value の name
STR.GetValue(text, delim='=')name=value の value
STR.ParseNameValue(text, ref name, ref value, delim="=")一度に分離
STR.ParsePairStrings(text, ref s1, ref s2, delim="=")2 文字列
STR.ParsePairIntegers(text, ref i1, ref i2, delim="=")2 整数
STR.ParsePairDoubles(text, ref d1, ref d2, delim="=")2 実数
STR.ParsePairIntDouble(text, ref i, ref d, delim="=")int + double
STR.ParsePairStringInteger(text, ref s, ref i, delim="=")string + int
STR.ParsePairStringDouble(text, ref s, ref d, delim="=")string + double

分割 / 結合

関数意味
STR.ParseCommaString(text), で分割 → array
STR.ParseTabSplitString(text)tab で分割
STR.ParseSplitString(text, char) / (text, string)任意の区切り文字で分割
STR.GetCommaText(list)array → , 結合
STR.GetTapSplitText(list)array → tab 結合
STR.GetSplitedText(list, char) / (list, string)array → 任意の区切りで結合
STR.StringToDoubleList(list)string array → double array

検査 / 変換

関数意味
STR.HaveSpace(text)空白を含むか
STR.HaveKoreanChar(str)ハングル含有
STR.IsStringNubmer(text)数字のみか
STR.IsNullOrWhiteSpace(text)空または空白のみ
STR.GetEnumType(type, value)文字列 → enum
STR.ConvertAvailableName(name)ファイル名 / 識別子として安全に整形
STR.StringToHexString(str)文字列 → 16 進表現

操作(新 string を返す)

関数意味
STR.Strip(text) / STR.StripBrace(text)両端空白 / 両端カッコ除去
STR.Trim / TrimStart / TrimEnd(text)標準 C# と同等
STR.ToLower(text) / STR.ToUpper(text)大小文字変換
STR.PadLeft(text, totalWidth) / STR.PadRight(text, totalWidth)桁合わせ
STR.Substring(text, start, len) / (text, start)部分文字列
STR.Insert(text, startIndex, value)挿入
STR.Remove(text, startIndex) / (text, startIndex, count)部分削除
STR.Replace(text, oldValue, newValue)全置換
STR.ReplaceString(text, start, length, toReplace)位置基準の置換
STR.GetReverse(data, step)step バイト単位で反転(例:16 進 byte swap)

検索 / 位置

関数意味
STR.Length(text)長さ
STR.Contains(text, value)含むか
STR.StartsWith(text, value) / EndsWith(text, value)接頭・接尾
STR.IndexOf(text, value) / (text, value, start) / (text, value, start, count)最初の位置
STR.NthIndexOf(text, value, n)n 番目の位置
STR.LastIndexOf(text, value) / (text, value, start) / (text, value, start, count)最後の位置

文字コード

関数意味
STR.GetCharCode(str, index=0)指定位置の charCode
STR.SetCharCode(str, index, code)指定位置の文字を置換

エンコード / エスケープ

関数意味
STR.EncodeMultiLine(data) / STR.DecodeMultiLine(data)複数行 ↔ 1 行エンコード
STR.EncodeBraceInFormat(format)FormatString 内で { } をエスケープ(表示用)
STR.Escape(input) / STR.Unescape(input)C スタイルエスケープ ↔ 原文

数値 ↔ 文字列

関数意味
STR.ParseToInt(text) / (text, defaultValue)文字列 → int
STR.ParseToDouble(text) / (text, defaultValue)文字列 → double
STR.ParseToStr(int) / (double) / (bool)数値/bool → 文字列
STR.ParseStringNumber(text, ref prefix, ref number, base=10)"M0017" → prefix="M"、number=17
STR.FormatNumberWithComma(int) / (double)1,234,567 のような千区切りカンマ
STR.ParseCommaNumber(text, int) / (text, double)カンマ含む文字列 → 数値

テキストファイルヘルパ

関数意味
STR.ReadAllLines(path, addLog=true)ファイル → 行 array
STR.ReadAllIntLines(path, addLog=true)ファイル → int array
STR.ReadFirstLine(path)先頭行のみ
STR.ReadAllText(path, addLog=false)ファイル全体 → 1 文字列
STR.SaveAllLines(path, lines)array → ファイル保存