私はDを学ぼうとしていますが、ドキュメントの不足(または私の理解)に苦しんでいるので、ここに来ました。私はすでに、以前は今までとは異なるが無関係な質問をしました。Dの文字列の解析D
とにかく、ここに行く:
私は別のもののために文字列を解析したいと思います。ラベルが存在しない場合、必須の空白がある
[<label>] <mnemonic> [parameters]
:
文字列の形式は次のようなものです。パラメータはコンマで区切ることができます。パラメータタイプはニーモニックに依存します。
PhobosライブラリのPhobosライブラリのstd.conv: parse
を使用して私の手助けをしたいと思いますが、どちらかの端にある空白で区切られた文字のように、「単語」を解析する方法に関するドキュメントは理解できません。整数などの場合はint i = parse!int(line)
として正常に動作します。しかし、もし私がstring s = parse!string(line)
をしなければならないと、それは行全体をつかむでしょう。
私はCでこれを書いたときと同じように、char**
(またはref string
)をデータ型としてコールドパースします。しかし、私はDを学習しています。
私は手動でそれを行うには、このような何かを試してみました:
string get_word(ref string s)
{
int i = 0;
while (i < s.length && isAlphaNum(s[i]))
i++;
string word = s[0 .. i];
s = s[i+1 .. $];
return word;
}
が、これはそれを行うには良い方法ですか?よりクリーンな方法がありますか?より速い方法?おそらくもっと安全な方法でしょうか? i+1
のインデックスが必ず存在するかどうかはわかりません。
ありがとうございました!
Dの私の信念は、私があらゆる種類の問題に遭遇したので、すでにわずかに減少しています。しかし、その道は確かに価値があるだろう。
これは文字列を進めますか?また、改行に当たったらどうなりますか?また、それは文字列を2回通過しませんか? ああ、 '.idup 'の有無にかかわらずうまくいくように思えますが、その理由を説明できますか? – Matej
この小さな関数は、最初の空白の位置を保存し、 ";"と同じことをします。小さな位置は、スライスに使用する必要がある最後を示します。 – bioinfornatics
面白い、ありがとう。しかし、私はcountUntilで "isWhite"関数をどのように使用しますか?私はそれを動作させるように見えることはできません。私は "isWhite"の否定をしたい。 – Matej