ファイルとstdinの読み取り
入力をプログラムにストリームします
「ファイルとstdinの読み取り」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
ツールは入力を受け取る
役立つCLIは通常、指定されたファイルや、パイプで渡されたテキストなど、何らかの入力を読み取ります。Zigには、その両方を扱う明確で明示的な方法があります。📥
パスでファイルを開く
std.fs.cwdで現在のディレクトリを取得し、openFileでそのディレクトリからの相対パスにあるファイルを読み取り用に開きます。
const file = try std.fs.cwd().openFile(path, .{});開いたものは必ず閉じる
開いているファイルは自分が所有するリソースです。defer file.close()をopenと組み合わせ、関数がどのように終了しても解放されるようにします。
defer file.close();ファイル全体を読み取る
すべてを一度に読み込むには、アロケーターとサイズ上限を指定してreadToEndAllocを呼び出します。バイト列が所有権付きのスライスとして返されます。
const data = try file.readToEndAlloc(a, 1024 * 1024);バイト列を後で解放する
返されたスライスはヒープ上にあるため、自分が所有します。defer a.free(data)を追加すると、使い終わったときにバッファーを解放できます。
defer a.free(data);サイズ上限は安全装置
最大バイト数の引数により、巨大なファイルがメモリを使い果たすのを防げます。ツールが現実的に受け取る入力に合った上限を選びましょう。
標準入力を取得する
パイプで渡されたテキストを読むには、std.io.getStdInを使います。開いたファイルと同じようにファイルが返されるため、同じ読み取り処理を適用できます。
const stdin = std.io.getStdIn();stdinをすべて読み取る
stdinからリーダーを取得してreadAllAllocを呼び出します。入力の終端までパイプで渡された内容をすべて集め、1つの所有権付きスライスにします。
const input = try stdin.reader().readAllAlloc(a, 1024 * 1024);1行ずつ読み取る
ストリーミング処理では、リーダーのreadUntilDelimiterOrEofを使ってバッファーに1行ずつ読み込みます。入力が終わるとnullが返されます。
const line = try r.readUntilDelimiterOrEof(&buf, '\n');速度のためにバッファーを使う
生の読み取りを行うたびにシステムコールが発生する可能性があります。リーダーをstd.io.bufferedReaderで包むと、小さな読み取りをまとめ、より少ない高速な処理にできます。
var br = std.io.bufferedReader(file.reader());ファイルでもパイプでも同じコード
ファイルとstdinはどちらもreaderを公開するため、受け取ったものがどちらかを解析ロジックは気にする必要がありません。すっきりした再利用可能な設計です。✨
クイックチェック
ファイルのバイト列を、利用できる形に変換する方法を思い出しましょう。
まとめ
openFileでファイルを開き、全体または1行ずつ読み取り、stdinからテキストを取得し、すべてのバッファーを解放しました。入力処理は完了です。🎯
AI チューターと学ぶ Zig — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「ファイルとstdinの読み取り」レッスンは無料ですか?
はい。「ファイルとstdinの読み取り」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「ファイルとstdinの読み取り」で何を学びますか?
入力をプログラムにストリームします ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ファイルとstdinの読み取り」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コマンドライン引数の読み取り
- ファイルとstdinの読み取り
- 出力と終了コードの書き込み
- バイナリのパッケージ化とリリース