1. ホーム
  2. file-io

[解決済み] あらゆるプログラミング言語でのファイルI/O [終了しました]。

2022-07-29 11:06:08

質問

これは、すべてのプログラマが時々抱く共通の疑問であるはずです。 テキストファイルからどのように行を読み取るか?そして、次の質問はいつも、どうやってそれを書き戻すかです。

もちろん、ほとんどの人は日々のプログラミングで高レベルのフレームワークを使っていますが(答え合わせに使うのはいいのですが)、時には低レベルで行う方法を知っておくのもいいでしょう。

私自身は C , C++Objective-C などの文字列操作言語でどのように行われているかを見ることができれば、どの言語でファイルIOを行うかについてより良い決定を下すのに役立つと思います。特に、以下のような文字列操作の言語でどのように行われるかを見るのは興味深いことだと思います。 python , ruby そしてもちろん perl .

ということで、ここでは コミュニティ・リソース 私たち全員が スター をプロファイルに追加して、必要なときに参照することができます。 ファイルI/O を行う必要があるときに参照します。言うまでもなく、私たちは日常的に扱わない言語に触れることができます。

このように答える必要があるのです。

  1. 新しいテキストファイル「"」を作成します。 fileio.txt "です。
  2. 最初の行 "hello"をテキストファイルに書き込む。
  3. 2行目の "world"をテキストファイルに追加します。
  4. 2行目 "world" を入力文字列に読み込む。
  5. 入力文字列をコンソールに出力します。

明確化する。

  • 1つの回答につき1つのプログラミング言語で行う方法のみを示す必要があります。
  • あらかじめテキストファイルが存在しないと仮定します。
  • 最初の行を書き込んだ後、テキストファイルを再度開く必要はない

特に言語の制限はありません。 C , C++ , C# , Java , Objective-C はすべて素晴らしいです。

でやる方法を知っていれば Prolog , Haskell , Fortran , Lisp または Basic であれば、どうぞお進みください。

どのように解決するのですか?

Python 3

with open('fileio.txt', 'w') as f:
   f.write('hello')
with open('fileio.txt', 'a') as f:
   f.write('\nworld')
with open('fileio.txt') as f:
   s = f.readlines()[1]
print(s)

明確な説明

  • readlines() リスト を返します。 したがって、readlines() を実行すると、ファイルの各行が読み込まれることになります。 このような場合、readlines() を使用するのは問題ありません。なぜなら、どのみちファイル全体を読まなければならないからです (最終行が必要なのです)。 しかし、ファイルが何行もあり、その n 行目を表示したいだけなら、ファイル全体を読む必要はありません。 ここでは、Pythonでファイルのn行目を取得するためのより良い方法を紹介します。 Python 3でxreadlines()の代わりになるものは何ですか? .

  • このwithステートメントとは何でしょうか? withステートメントは、コードブロックの先頭で、変数fを ストリームオブジェクト として使用します。 withブロックが終了すると、pythonは自動的にf.close()を呼び出します。 これにより、withブロックをいつどのように終了しても(たとえ未処理の例外で終了しても)、終了時にファイルがクローズされることが保証されます。 (たとえ処理されない例外によって終了したとしても)。明示的に f.close() を呼び出すこともできますが、コードが例外を発生させて f.close() の呼び出しに至らなかったらどうでしょう?そのためにwith文は便利なのです。

  • 操作のたびにファイルを開き直す必要がない。1つのブロックの中に全コードを書くことができます。

    with open('fileio.txt', 'w+') as f:
        f.write('hello')
        f.write('\nworld')
        s = f.readlines()[1]
    print(s)
    
    

    3つの操作の違いを強調するために、3つのwithブロックを使いました。 write (mode 'w'), append (mode 'a'), read (mode 'r', default)です。