Flat Leon Works

アプリやゲームを作ってます。

【Nim】文字列操作

Nimでの文字列操作関連をまとめてみました。

Nimのバージョンは 0.17.2 を想定しています。( 執筆時の最新バージョン )

文字列の基本

文字、文字列リテラル

記法名称備考
'a'文字リテラル(Character literal)
"abc"文字列リテラル(String literal)
r"abc"Raw文字列リテラル(Raw string literal)エスケープシーケンス無効
"""abc"""3重クオート文字列リテラル(Triple quoted string literal)エスケープシーケンス無効
改行可能
" をそのまま使用可能

文字、文字列型

説明
char文字を表す。C言語のcharと同じく1バイト。
string通常はこのstring型を使う
cstringC言語文字列を表す。cstringとstringは相互に変換が可能になっている。

文字列関連モジュール

標準モジュール(system,strutils)の文字列関連プロシージャ

プロシージャの説明は推測で書いている部分もあるので、もしかしたら間違っているかもしれません。

判定

プロシージャ引数:戻り値説明モジュール
`==`(x, y: string): bool文字列が一致するかどうかsystem
isNil(x: string): boolnilかどうかを取得
(stringは初期値がnil)
system
contains(s: string; c: char): bool

(s, sub: string): bool

(s: string; chars: set[char]): bool
含まれるかどうかを取得するstrutils
isAlphaAscii(c: char): bool文字列がa-z,A-Zの範囲のみかどうかを取得するstrutils
isAlphaNumeric(c: char): bool文字列がa-z,A-Z,0-9の範囲のみかどうかを取得するstrutils
isDigit(c: char): bool文字列が0-9の範囲のみかどうかを取得するstrutils
isSpaceAscii(c: char): bool文字列が空白のみかどうかを取得するstrutils
isLowerAscii(c: char): bool小文字のみかどうかを取得するstrutils
isUpperAscii(c: char): bool大文字のみかどうかを取得するstrutils
isNilOrEmpty(s: string): boolnilもしくは空文字かどうかを取得するstrutils
isNilOrWhitespace(s: string): boolnilもしくは空白のみかどうかを取得するstrutils
startsWith(s, prefix: string): bool

(s: string; prefix: char): bool
指定の文字列で始まっているかどうかを取得するstrutils
endsWith(s, suffix: string): bool

(s: string; suffix: char): bool
指定の文字列で終わっているかどうかを取得するstrutils
continuesWith(s, substr: string; start: Natural): bool指定の位置から指定の文字列で始まっているかどうかを取得するstrutils
allCharsInSet(s: string; theSet: set[char]): bool文字列内のすべての文字が指定の文字セットに含まれているかどうかstrutils
validIdentifier(s: string): bool識別子として正当化どうかを取得するstrutils

比較

プロシージャ引数:戻り値説明モジュール
`<=`(x, y: string): bool文字列の比較system
`<`(x, y: string): bool文字列の比較system
cmp(x, y: string): int文字列の比較system
cmpIgnoreCase(a, b: string): int大文字小文字を無視した比較strutils
cmpIgnoreStyle(a, b: string): int文字列を正規化した上で比較strutils
editDistance(a, b: string): int2つの文字列の編集距離(レーベンシュタイン距離)を取得するstrutils

検索

プロシージャ引数:戻り値説明モジュール
count(s: string; sub: string; overlapping: bool = false): int

(s: string; sub: char): int

(s: string; subs: set[char]): int
出現回数を取得するstrutils
countLines(s: string): int行数を取得するstrutils
find(s, sub: string; start: Natural = 0; last: Natural = 0): int

(s: string; sub: char; start: Natural = 0; last: Natural = 0): int

(s: string; chars: set[char]; start: Natural = 0; last: Natural = 0): int
指定の文字の位置を検索するstrutils
rfind(s, sub: string; start: int = - 1): int

(s: string; sub: char; start: int = - 1): int

(s: string; chars: set[char]; start: int = - 1): int
指定の文字の位置を検索する(末尾から検索する)strutils
abbrev(s: string; possibilities: openArray[string]): int指定の文字列リストの中から一致するもののインデックスを取得する(略語展開?)strutils

情報取得

プロシージャ引数:戻り値説明モジュール
len(x: string): int文字列の長さを取得system
low(x: string): int先頭インデックスを取得(たぶん常に0)system
high(x: string): int末尾インデックスを取得(空文字なら-1)system

非文字列化(string -> XXX)

プロシージャ引数:戻り値説明モジュール
parseInt(s: string): int文字列をint化するstrutils
parseBiggestInt(s: string): BiggestInt文字列をint化するstrutils
parseUInt(s: string): uint文字列をuint化するstrutils
parseBiggestUInt(s: string): BiggestUInt文字列をuint化するstrutils
parseFloat(s: string): float文字列をfloat化するstrutils
parseOctInt(s: string): int8進数文字列をint化するstrutils
parseHexInt(s: string): int16進数文字列をint化するstrutils
parseBool(s: string): bool文字列をbool化するstrutils
parseEnum[T: enum](s: string): T

[T: enum](s: string; default: T): T
文字列をenum値化するstrutils

文字列化(XXX -> string)

プロシージャ引数:戻り値説明モジュール
repr[T](x: T): stringオブジェクトの文字列表現を取得system
`$`(x: int): stringオブジェクトの文字列表現を取得system
toHex(x: BiggestInt; len: Positive): string16進数表現文字列を取得するstrutils
toOctal(c: char): string8進数表現文字列を取得するstrutils
toOct(x: BiggestInt; len: Positive): string8進数表現文字列を取得するstrutils
toBin(x: BiggestInt; len: Positive): string2進数表現文字列を取得するstrutils
intToStr(x: int; minchars: Positive = 1): stringint型を文字列化するstrutils
formatBiggestFloat(f: BiggestFloat; format: FloatFormatMode = ffDefault; precision: range[0 .. 32] = 16; decimalSep = '.'): stringfloat型を文字列化するstrutils
formatFloat(f: float; format: FloatFormatMode = ffDefault; precision: range[0 .. 32] = 16; decimalSep = '.'): stringfloat型を文字列化するstrutils
formatSize(bytes: int64; decimalSep = '.'; prefix = bpIEC; includeSpace = false): string数値のデータサイズ表現文字列を取得するstrutils
formatEng(f: BiggestFloat; precision: range[0 .. 32] = 10; trim: bool = true; siPrefix: bool = false; unit: string = nil; decimalSep = '.'): string数値の工学表記文字列を取得するstrutils

新規string作成

プロシージャ引数:戻り値説明モジュール
newString(len: Natural): string長さ指定で新規作成system
newStringOfCap(cap: Natural): stringキャパシティ指定で新規作成system

複製

プロシージャ引数:戻り値説明モジュール
copy(s: string; first = 0): string

(s: string; first, last: int): string
文字列を複製system
substr(s: string; first = 0): string

(s: string; first, last: int): string
文字列の一部分を複製system
`[]`(s: string; x: Slice[int]): string文字列の一部分を複製system

合成

プロシージャ引数:戻り値説明モジュール
`&`(x, y: string): string

(x: char; y: string): string

(x: string; y: char): string

(x, y: char): string
連結で新規作成system
`&=`(x: var string; y: string)文字列を末尾に追加system
add(x: var string; y: char)

(x: var string; y: string)

(x: var string; y: cstring)

(result: var string; x: int64)

(result: var string; x: float)
文字列を末尾に追加system
safeAdd(x: var string; y: char)

(x: var string; y: string)
文字列を末尾に追加system
insert(x: var string; item: string; i = 0.Natural)文字列を指定のインデックスに挿入system
`[]=`(s: var string; x: Slice[int]; b: string)文字列を指定の範囲に挿入system
repeat(c: char; count: Natural): string文字を指定回数連続させた文字列を取得するstrutils
repeat(s: string; n: Natural): string文字列を指定回数連続させた文字列を取得するstrutils
join(a: openArray[string]; sep: string = ""): string文字列リストを連結するstrutils

整形

プロシージャ引数:戻り値説明モジュール
strip(s: string; leading = true; trailing = true; chars: set[char] = Whitespace): string先頭と末尾の空白を除去した文字列を取得する。引数で先頭のみ末尾のみ、空白以外の文字を指定ができるstrutils
align(s: string; count: Natural; padding = ' '): string文字寄せを行った文字列を取得するstrutils
wordWrap(s: string; maxLineWidth = 80; splitLongWords = true; seps: set[char] = Whitespace; newLine = "\x0D\x0A"): stringワードラップを行った文字列を取得するstrutils
indent(s: string; count: Natural; padding: string = " "): stringインデントを行った文字列を取得するstrutils
unindent(s: string; count: Natural; padding: string = " "): stringインデント解除を行った文字列を取得するstrutils
center(s: string; width: int; fillChar: char = ' '): string文字列の中央寄せを行うstrutils
insertSep(s: string; sep = '_'; digits = 3): string数字文字列にセパレータを追加した文字列を取得するstrutils
escape(s: string; prefix = "\""; suffix = "\""): stringエスケープ文字をエスケープした文字列を取得するstrutils
unescape(s: string; prefix = "\""; suffix = "\""): stringescapeの逆strutils
trimZeros(x: var string)末尾の0を除去するstrutils
addSep(dest: var string; sep = ", "; startLen: Natural = 0)指定の長さ以降にセパレータ文字列を追加するstrutils

置換

プロシージャ引数:戻り値説明モジュール
replace(s, sub: string; by = ""): string置換した文字列を取得するstrutils
replaceWord(s, sub: string; by = ""): string単語置換した文字列を取得するstrutils
multiReplace(s: string; replacements: varargs[(string, string)]): string 複数置換に特化したreplacestrutils
toLowerAscii(c: char): char大文字を小文字化したものを取得strutils
toUpperAscii(c: char): char小文字を大文字化したものを取得strutils
capitalizeAscii(s: string): string最初の文字を大文字化したものを取得strutils
normalize(s: string): string正規化したものを取得。正規化とは具体的には小文字化し_を除去する。(Nimの識別子ルールで利用される)strutils
`%`(formatstr: string; a: openArray[string]): string

(formatstr, a: string): string
書式文字列を作成するstrutils
format(formatstr: string; a: varargs[string, `$`]): stringstrutils
addf(s: var string; formatstr: string; a: varargs[string, `$`])書式で文字列を追加するstrutils
fmt""(pattern: static string; openChar: static char; closeChar: static char): stringPython風書式文字列を作成する。""内はraw string literalsとして扱われることに注意(\nはそのまま\nとして扱われる。改行コードを使いたい場合は{'\n'}とする)strformat
`&`(pattern: static string; openChar: static char; closeChar: static char): stringPython風書式文字列を作成する。fmt""とは違い""内は普通のstring literalsとして扱われるstrformat

削除

プロシージャ引数:戻り値説明モジュール
delete(s: var string; first, last: int)指定の範囲を削除するstrutils
removeSuffix(s: var string; chars: set[char] = Newlines)指定の末尾の文字列を除去するstrutils

分割

プロシージャ引数:戻り値説明モジュール
splitWhitespace(s: string): seq[string]文字列を空白で分割したものを取得するstrutils
[iterator] splitWhitespace(s: string): string文字列を空白で分割したものを取得するstrutils
splitLines(s: string): seq[string]文字列を行ごとに分割したものを取得するstrutils
[iterator] splitLines(s: string): string文字列を行ごとに分割したものを取得するstrutils
split(s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): seq[string]

(s: string; sep: char; maxsplit: int = - 1): seq[string]

(s: string; sep: string; maxsplit: int = - 1): seq[string]
文字列を任意の文字(列)で分割したものを取得するstrutils
[iterator] split(s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): string

(s: string; sep: char; maxsplit: int = - 1): string

(s: string; sep: string; maxsplit: int = - 1): string
文字列を任意の文字(列)で分割したものを取得するstrutils
rsplit(s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): seq[string]

(s: string; sep: char; maxsplit: int = - 1): seq[string]

(s: string; sep: string; maxsplit: int = - 1): seq[string]
文字列を任意の文字(列)で分割したものを取得する(末尾から分割していく)strutils
[iterator] rsplit(s: string; seps: set[char] = Whitespace; maxsplit: int = - 1): string

(s: string; sep: char; maxsplit: int = - 1): string

(s: string; sep: string; maxsplit: int = - 1; keepSeparators: bool = false): string
文字列を任意の文字(列)で分割したものを取得する(末尾から分割していく)strutils

その他

プロシージャ引数:戻り値説明モジュール
setLen(s: var string; newlen: Natural)文字列の長さを変更system
cstringArrayToSeq(a: cstringArray; len: Natural): seq[string]
(a: cstringArray): seq[string]
system
allocCStringArray(a: openArray[string]): cstringArraysystem
deallocCStringArray(a: cstringArray)system
shallow(s: var string)代入時の動作を浅いコピーにするsystem
GC_ref(x: string)参照カウントを増やすsystem
GC_unref(x: string)参照カウントを減らすsystem
getRefcount(x: string): int参照カウントを取得するsystem

リンク