Nim ファイルの読み書き

Nimでファイルの読み書きする方法を調べてみます。

こちらを参考にさせていただきました。
nimファイル操作
Nimファイル操作


ファイル出力



ファイルの読み書きで、特にimportの追加は必要ありません。
openでファイルを開き、closeでファイルを閉じます。


  1. let f : File = open("test.txt" ,FileMode.fmWrite)
  2. try:
  3.     f.writeLine "Hello"
  4.     f.writeLine "World"
  5. finally:
  6.     close(f)



出力したファイル


Hello
World






ファイル読み込み



出力したファイルを読み込んでみます。
「FileMode.fmWrite」を「FileMode.fmRead」に変更して読み込みモードで開きます。


  1. let f : File = open("test.txt" ,FileMode.fmRead)
  2. try:
  3.     echo f.readLine
  4.     echo f.readLine
  5. finally:
  6.     close(f)



実行結果


$ nim c -r sample.nim
Hello
World





ファイルを最後まで読み込む



1行ずつ最後までファイルを読み込むには、endOfFileを確認しながらループします。


  1. let f : File = open("test.txt" ,FileMode.fmRead)
  2. try:
  3.     while not f.endOfFile:
  4.         echo f.readLine
  5.     
  6. finally:
  7.     close(f)



実行結果


$ nim c -r sample.nim
Hello
World





ファイルをすべて読み込む



ファイルの内容をすべて読み込むにはreadAllを使用します。


  1. let f : File = open("test.txt" ,FileMode.fmRead)
  2. try:
  3.     echo f.readAll
  4.     
  5. finally:
  6.     close(f)



実行結果


$ nim c -r sample.nim
Hello
World





defer



ファイルを閉じるときは「defer」を利用すると便利です。
defer文より後ろの同じブロックの処理がtry節に入っているのと同様の効果となります。
https://gist.github.com/miyakogi/b1df00c8bc99927d9d0d

「defer文より後ろの同じブロック」という条件なので、
defer文はブロックで使用する必要があります。

以下のソースだと実行できません。


  1. let f : File = open("test.txt" ,FileMode.fmRead)
  2. defer:
  3.     close(f)
  4. echo f.readAll



実行結果


$ nim c -r sample.nim
sample.nim(3, 1) Error: defer statement not supported at top level



blockで囲ってやります。


  1. block:
  2.     let f : File = open("test.txt" ,FileMode.fmRead)
  3.     defer:
  4.         close(f)
  5.     echo f.readAll



実行結果


$ nim c -r sample.nim
Hello
World




ブロックに入っていればいいので、このように関数化してもOKです。


  1. proc main() =
  2.     let f : File = open("test.txt" ,FileMode.fmRead)
  3.     defer:
  4.         close(f)
  5.     echo f.readAll
  6.     
  7. main()





【参考URL】
nimファイル操作
Nimファイル操作
関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ