は単なる文字列はcharの配列であることを覚えています以前の質問のうち、実際には、ステートマシンの遷移を記述する整数と文字が混在するテキストを解析する方法が必要なようです。私はあなたがこれのためにScanf
モジュールをもっともうまく扱うことをお勧めします。しかし、もっと複雑なものが必要な場合は、手書きスキャナーが必要になるかもしれません(Str.string_match
を使用してください。または、深く掘り下げたい場合はocamllex
スキャナジェネレーターを使用してください)。
scanfのでチャネルからラインを読み込む簡単な例は次のようになります。私たちはinput_line
の行を読んではなく、直接入力チャンネルにScanf.scanf
を使用している
let read_transition input =
try
let line = input_line input in
Scanf.sscanf line "%d %c %d"
(fun x ch y -> Some (x, ch, y))
with End_of_file -> None
注意。その理由は、Scanf.scanf
には先読みの文字を必要とする可能性があるため、チャンネルを読み込む他の方法と混合すると文字がスキップされる可能性があるからです。 input_line
を使用し、次にScanf.sscanf
(Scanf.scanf
ではなく)を使用することで、そのコーナーケースを回避します。
入力の構文によっては、それに応じてscanfパターンを調整する必要があるかもしれないことにも注意してください。
厳密に言えば、文字列は文字配列ではなく、後者は '[| a; b; c |]'です。そして 'x(i)'構文でアクセスします。 – ivg