すべてのプログラミング言語でのファイルI / O [終了]


127

これは、すべてのプログラマーが時々持っている共通の質問でなければなりません。テキストファイルから行を読み取るにはどうすればよいですか?次に、次の質問は常にそれをどのように書き戻すかです。

もちろん、ほとんどの人は日々のプログラミングで高レベルのフレームワークを使用していますが(回答で使用するのは問題ありません)、低レベルでそれを行う方法を知っているとよい場合もあります。

私自身はそれを行う方法を知っています CC++そしてObjective-C、確かにだけ助けに私たちは中ioの私たちのファイルをどうするかの言語についてのより良い意思決定を行う場合には、一般的な言語のすべてで行うのかを確認するために便利だろう。特に、文字列操作言語でどのように行われるかを見るのは興味深いと思います。もちろんpythonrubyperl

そこで、ここでは、すべてのプロファイルにスターを付け、新しい言語でファイルI / Oを行う必要があるときに参照できるコミュニティリソースを作成できると考えています。露出は言うまでもありませんが、日常的に扱っていない言語に私達は全員行きます。

これはあなたが答える必要がある方法です:

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

明確化:

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

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

あなたはそれを行う方法を知っている場合はPrologHaskellFortranLisp、またはBasic右先に行くしてください。


9
この問題は、すべての言語でタグ付けされていないため、特定の言語の検索では表示されないことです。
ChrisF

21
この質問が閉じられた理由がわかりません。このサイトの目的は、人々が情報を見つけやすくすることではありませんか?誰かが(IOのような)Cで何かをする方法を知っていて、Pythonで同じことをする方法を学びたいなら、これは、彼らが両方を並べて見ることを可能にすることによって彼らを助けるかもしれません。
スラップアウト

18
また、なぜこれがクローズされているのかもわかりません。それは、「...最小限の文字数で...」という単語が含まれていないからというだけのようで、かなりばかげています。コードゴルフは楽しい練習です。しかし、すべてのロゼッタ石の質問にすべての回答で小さなコードを難読化させることは本当に役立つのでしょうか?
スペンサーネルソン2010

12
これがQ&Aサイトにどのように適合するかわかりません。少なくともコードゴルフでは、回答に投票するためのやや客観的な基準があります。最も短いまたは最も賢い回答が最も多くの票を獲得します。これで、それは何ですか、何人のHaskellが好きですか?このような質問は、すべての種類のコンテンツを1つだけに設計されたシステムに詰め込もうとするようなものです。これを処理するためのインターネットの残りの何が問題になっていますか?

11
なぜこれがうまくいかないのか。それぞれのアプローチの長所と短所に関する情報はありません(どの言語が一方向のみをサポートしていますか?)。各言語のトレードオフと深い問題についての議論はありません。範囲が限定されているため、バジリオンで「すべての言語で」の質問を分離する必要がある。そして何よりも、コミュニティが各回答の質を管理することはありません。人々が投票しているのに節度がないと言うのはなぜですか?なぜなら、言語ごとに1つの回答しかないはずであり、人々は自分の分野で複数の選択肢を見るのに十分な回答を読まないからです。
dmckee ---元モデレーターの子猫2010

回答:


48

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番目の行を取得するいくつかのより良い方法を次に示します。Python3でxreadlines()を置き換えるものは何ですか?

  • これは声明とは何ですか?withステートメントはコードブロックを開始し、open()の呼び出しから返されたストリームオブジェクトとして変数fを使用できます。withブロックが終了すると、Pythonはf.close()を自動的に呼び出します。これにより、ブロックを終了する方法や方法に関係なく、withブロックを終了すると、ファイルが確実に閉じられます(ハンドルされていない例外を介して終了した場合でも)。f.close()を明示的に呼び出すこともできますが、コードで例外が発生し、f.close()呼び出しに到達しない場合はどうなりますか?そのため、withステートメントが便利です。

  • 各操作の前にファイルを再度開く必要はありません。ブロック全体でコード全体を記述できます。

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

    3つのブロックの3つを使用して、3つの操作の違いを強調しました:書き込み(モード 'w')、追加(モード 'a')、読み取り(モード 'r'、デフォルト)。


19
誰もreadlines()[1]サンプルコードを書くべきではないと思います。この場合、ファイルには2行しかないことを知っているかもしれませんが、それを適切なソリューションであると思い込んでいる誰かが100万行のファイルで試してみると、かなり厄介な驚きが出るかもしれません。
Porculus

14
@Porculusとreadlines()を使用すると、ファイルのすべての行を通過するわけではありません。これはpython 3です。readlines()は(リストではなく)イテレータを返します。したがって、ファイルの最初の2行だけが読み取られます。これはpython 2のxreadlines()に似ています(これはpython 3には存在しません)。
スナキレ

7
@snakile:readlines()イテレータ(リストではない)戻り値をサポートするものを引用していただけますか?注:通常、イテレータにインデックスを付けることはできません。
SilentGhost 2010

8
@SilentGhost "Dive into Python 3"を引用しています: "readlines()メソッドはイテレータを返すようになりましたので、Python 2のxreadlines()と同じくらい効率的です"。このステートメントを検索:diveintopython3.org/porting-code-to-python-3-with-2to3.html。次に、Python 3ではイテレータにインデックスを付けることができます。シェルでrange(10)[4]と入力します(range()もリストを返すpython 2とは異なり、Python(3)ではrange()もイテレータを返します)。range(N)[i]はO(i)で行われ、O(1)ではなくO(N)で行われることに注意してください。
スナキレ

5
@snakile:あなたのコメントはいくつかのレベルで間違っています。最初に、readlinesはPython 3でリストを返します(テストして確認してください)。したがって、指定されたコードはファイル全体を読み取ります。次に、イテレータはPython 2または3 rangeではインデックスを作成できません。オブジェクトは、O(1)で行われるインデックス作成を特別にサポートしています。
インタージェイ2010

242

LOLCODE

スペックは控えめに言っても大雑把ですが、私はできる限りのことをしました。反対投票を始めましょう!:)私はそれでも楽しい練習だと思っています。

HAI
CAN HAS STDIO?
PLZ OPEN FILE "FILEIO.TXT" ITZ "TehFilez"?
    AWSUM THX
        BTW #There is no standard way to output to files yet...
        VISIBLE "Hello" ON TehFilez
        BTW #There isn't a standard way to append to files either...
        MOAR VISIBLE "World" ON TehFilez
        GIMMEH LINES TehLinez OUTTA TehFilez
        I HAS A SecondLine ITZ 1 IN MAH TehLinez
        VISIBLE SecondLine
    O NOES
        VISIBLE "OH NOES!!!"
KTHXBYE

28
文字通り、私にこのプロパティを持たせる言語が他にあるとは思いません...笑。
Ionuț G. Stan 2010

85
LOLCODEが他のどの見たものよりも読みやすいと思うのは悲しいですか?
Joel、

13
それは自然言語のように感じるかどれだけ興味深いものです。
Abhinav Sarkar、2010年

19
逆心理学はプログラマーにとって反射的な行動であるため、反対票が投じられることを期待していると言うことは、SOに対する賛成票の保証です。
Brock Woolf

13
PLZ?/ AWSUM THX / O NOESは素晴らしいです。これは私にはちょっと万能のようです。
Calvin1602 2010

43

脳*** k

,------------------------------------------------>,------------------------------------------------>,------------------------------------------------>[-]+++++++++>[-]+++++++++>[-]+++++++++<<<<<[>>>>>>+>>>+<<<<<<<<<-]>>>>>>>>>[<<<<<<<<<+>>>>>>>>>-]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]>>[-]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<[>>>>+>+<<<<<-]>>>>>[<<<<<+>>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<<<->>>->>>>>[-]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<[>>>>+>+<<<<<-]>>>>>[<<<<<+>>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>][-]<<<<<<<[>>>>>+>>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<<->>>->>>>[-]<<<<<<<[>>>>>+>>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>][-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<->>>->>>[-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>]<[-]+<[-]+<<<<<<[>>>>>>[-]<<<<<<[-]]>>>>>>[[-]+<<<<<[>>>>>[-]<<<<<[-]]>>>>>[[-]+<<<<[>>>>[-]<<<<[-]]>>>>[[-]+<<<[>>>[-]<<<[-]]>>>[[-]+<<[>>[-]<<[-]]>>[[-]+<[>[-]<[-]]>[[-]+++++++++++++++++++++++++++++++++++++++++++++++++.-...>[-]<[-]]<>[-]]<<>>[-]]<<<>>>[-]]<<<<>>>>[-],------------------------------------------------>,------------------------------------------------>,------------------------------------------------>[-]+++++++++>[-]+++++++++>[-]+++++++++<<<<<[>>>>>>+>>>+<<<<<<<<<-]>>>>>>>>>[<<<<<<<<<+>>>>>>>>>-]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]>>[-]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<[>>>>+>+<<<<<-]>>>>>[<<<<<+>>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<<<->>>->>>>>[-]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<[>>>>+>+<<<<<-]>>>>>[<<<<<+>>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>][-]<<<<<<<[>>>>>+>>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<<->>>->>>>[-]<<<<<<<[>>>>>+>>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>][-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<->>>->>>[-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>]<[-]+<[-]+<<<<<<[>>>>>>[-]<<<<<<[-]]>>>>>>[[-]+<<<<<[>>>>>[-]<<<<<[-]]>>>>>[[-]+<<<<[>>>>[-]<<<<[-]]>>>>[[-]+<<<[>>>[-]<<<[-]]>>>[[-]+<<[>>[-]<<[-]]>>[[-]+<[>[-]<[-]]>[[-]+++++++++++++++++++++++++++++++++++++++++++++++++.-...>[-]<[-]]<>[-]]<<>>[-]]<<<>>>[-]]<<<<>>>>[-]]<<<<<>>>>>[-]]<<<<<<>>>>>>>[<<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]>[-]++++++++++<<+<<<<<<+>>>>>>>>>>>[-]<<<<<[>>>+>>+<<<<<-]>>>>>[<<<<<+>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<->>->>>[-]<<<<<[>>>+>>+<<<<<-]>>>>>[<<<<<+>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>]<<<<[-]+<[>[-]<[-]]>[[-]+>[<[-]>[-]]<[<<<<<<<[-]<+>>>>>>>>[-]]><[-]]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]>[-]++++++++++>>>[-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<->>>->>>[-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>]<<<<[-]+<<[>>[-]<<[-]]>>[[-]+>[<[-]>[-]]<[<<<<<<<<[-]<+>>>>>>>>>[-]]><[-]]<<<<<<<<<++++++++++++++++++++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++++++++++++++++.>>>>>>>>[-]]]<<<<<>>>>>[-]]<<<<<<>>>>>>>[<<<<<<<<[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]>[-]++++++++++<<+<<<<<<+>>>>>>>>>>>[-]<<<<<[>>>+>>+<<<<<-]>>>>>[<<<<<+>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<->>->>>[-]<<<<<[>>>+>>+<<<<<-]>>>>>[<<<<<+>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>]<<<<[-]+<[>[-]<[-]]>[[-]+>[<[-]>[-]]<[<<<<<<<[-]<+>>>>>>>>[-]]><[-]]<<<<<<<<[>>>>>>+>>+<<<<<<<<-]>>>>>>>>[<<<<<<<<+>>>>>>>>-]>[-]++++++++++>>>[-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>[<<<<<<->>>->>>[-]<<<<<<[>>>>+>>+<<<<<<-]>>>>>>[<<<<<<+>>>>>>-]<<<[>>+>+<<<-]>>>[<<<+>>>-][-]<<[>>[-]<[>[-]+<[-]]<[-]]>[-]>]<<<<[-]+<<[>>[-]<<[-]]>>[[-]+>[<[-]>[-]]<[<<<<<<<<[-]<+>>>>>>>>>[-]]><[-]]<<<<<<<<<++++++++++++++++++++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++++++++++++++++.>>>>>>>>[-]]

26
「-」を逃しましたか?;)
エイデンベル

2
ああ努力。参考までに、書くのにどれくらいの時間がかかりましたか?
Riduidel 2010

そして、それを複数の行に分割することはできませんか?史上最高の言語
TheIronKnuckle

42

COBOL

誰もしなかったので......

IDENTIFICATION DIVISION.
PROGRAM-ID.  WriteDemo.
AUTHOR.  Mark Mullin.
* Hey, I don't even have a cobol compiler

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT StudentFile ASSIGN TO "STUDENTS.DAT"
        ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD TestFile.
01 TestData.
   02  LineNum        PIC X.
   02  LineText       PIC X(72).

PROCEDURE DIVISION.
Begin.
    OPEN OUTPUT TestFile
    DISPLAY "This language is still around."

    PERFORM GetFileDetails
    PERFORM UNTIL TestData = SPACES
       WRITE TestData 
       PERFORM GetStudentDetails
    END-PERFORM
    CLOSE TestFile
    STOP RUN.

GetFileDetails.
    DISPLAY "Enter - Line number, some text"
    DISPLAY "NXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    ACCEPT  TestData.

2
これは、純粋な素晴らしさとして100万回以上投票されるべきです+1
Brock Woolf

1
「この言語はまだ残っています」の+1 = D
missingfaktor 2010

3
これを自宅で試すときは注意してください。あなたのcobolコンパイラーは、これらの現代の可変長行を気に入らないかもしれません...
Stephan Eggermont

さて、これはさびた古い思い出を呼び戻します。ただし、要件を満たしているとは思いません...
EvilTeach 2010

私は今、AcuCOBOLでコードを書いています!ちなみに、「I / O」の「I」の部分はどこですか?
Buggabill 2010

39

ハスケル

main :: IO ()
main = let filePath = "fileio.txt" in
       do writeFile filePath "hello"
          appendFile filePath "\nworld"
          fileLines <- readFile filePath
          let secondLine = (lines fileLines) !! 1
          putStrLn secondLine

ファイルを読み書きするだけの場合:

main :: IO ()
main = readFile "somefile.txt" >>= writeFile "someotherfile.txt" 

7
ああ、「全能」ハスケル。ご協力いただきありがとうございます:)
Brock Woolf

3
@Andreas Rejbrand彼が 'be'を忘れたのはほぼ間違いない
フェデリコクレズカロカ'21 / 08/18

4
Haskellの基本的なI / Oには他にも多くのアプローチがあり、特定のタイプのアプリを実行すると、Haskellで有用/重要になります。cabal / hackageのテキストおよびバイト文字列パッケージを使用すると、さまざまなエンコーディングを処理できます。また、iterateeやenumerateなどのさまざまなiterateeスタイルパッケージは、インクリメンタルioを実行するための「最もよく知られている抽象化」を表します。また、parsecのようなlibsの解析とattoparsec libのみの増分バイト文字列も重要です。Haskellersはioデザインの選択を探求するために非常に徹底的なアプローチをとっています。実行不可能な例には、怠惰なioと継続が含まれます
Carter

4
祐二:基本的には、浮気によって。Haskellは純粋な関数型言語ですが、副作用のためにコンパイラが特別にサポートしているタイプのものは例外ですIO a。(副作用を実行または観察するものはすべてタイプIO aであるため、純度は他の場所に保持されます。したがって、タイプシステムは、プログラムの残りの部分が純粋なままであることを保証します。)
Sam Stokes

4
たまたまそれIOはモナドですが、それが副作用を許可されている理由ではありません。モナドであることは、命令型の構文を書くことを可能にします。それはまた(特別な言語のサポートにより)副作用が賢明な順序で発生することを確実にするので、書き込む前にファイルから読み取らないなど。
サム・ストークス

35

D

module d_io;

import std.stdio;


void main()
{
    auto f = File("fileio.txt", "w");
    f.writeln("hello");
    f.writeln("world");

    f.open("fileio.txt", "r");
    f.readln;
    auto s = f.readln;
    writeln(s);
}

10
+ 1、C ++バージョンよりもはるかに美しく読みやすいです!DがCとC ++を完全に置き換える日を夢見ています。:-)
missingfaktor 2010

10
いいね。多分私はいつかDを学ぶべきです。
ヘルパーメソッド2010

34

ルビー

PATH = 'fileio.txt'
File.open(PATH, 'w') { |file| file.puts "hello" }
File.open(PATH, 'a') { |file| file.puts "world" }
puts line = File.readlines(PATH).last

2
+1いいですが、厳密に言えば、コンソールに書き込む前に入力を変数に入れないでください。
Lasse Espeholt、2010

3
@lasseespeholt、あなたは正しい。それを私が直した。
ウェインコンラッド

5
varnameを大文字にして「PATH」と言う理由はありません。「パス」と言うだけです。
OTZ 2010

2
@otz定数です。彼はそれを「パス」と呼ぶこともできましたが、Rubyの定数は大文字で始めなければなりません。
Sirupsen 2010

1
@Thomas Ahle:File.openブロックで使用すると、ファイルが開かれ、ブロックに渡されて、自動的に閉じられます。
Matchu 2010

33

C#

string path = "fileio.txt";
File.WriteAllLines(path, new[] { "hello"}); //Will end it with Environment.NewLine
File.AppendAllText(path, "world");

string secondLine = File.ReadLines(path).ElementAt(1);
Console.WriteLine(secondLine);

File.ReadLines(path).ElementAt(1)は.Net 4.0のみです。代わりFile.ReadAllLines(path)[1]に、ファイル全体を配列に解析します。


1
C#ではかなり短いです。貢献してくれてありがとう
Brock Woolf

13
注:File.ReadLinesは.NET 4に固有です
kirk.burleson 2010

5
C#が持つ不快な構文
Aiden Bell

3
@エイデンベル:どの言語に関連していますか?
zfedoran 2010

2
@エイデンベル-この答えは、可読性よりも簡潔にすることを試みています。C#で同じことを実現するには、多くの「良い」方法があります。より現実的な例については、dotnetperls.com / file-handlingを参照してください。
Dan Diplo、2010

29

ANSI C

#include <stdio.h>
#include <stdlib.h>

int /*ARGSUSED*/
main(char *argv[0], int argc) {
   FILE *file;
   char buf[128];

   if (!(file = fopen("fileio.txt", "w")) {
      perror("couldn't open for writing fileio.txt");
      exit(1);
   }

   fprintf(file, "hello");
   fclose(file);

   if (!(file = fopen("fileio.txt", "a")) {
      perror("couldn't opened for appening fileio.txt");
      exit(1);
   }

   fprintf(file, "\nworld");
   fclose(file);

   if (!(file = fopen("fileio.txt", "r")) {
      perror("couldn't open for reading fileio.txt");
      exit(1);
   }

   fgets(buf, sizeof(buf), file);
   fgets(buf, sizeof(buf), file);

   fclose(file);

   puts(buf);

   return 0;
}

素敵な答え。+1を提供していただきありがとうございます
Brock Woolf

なぜfgets()を2回呼び出すのですか?
kirk.burleson 2010

2
2行目はstdoutに出力したい行なので
JeremyP

1
#include <stdio.h> int main(void){FILE file; char buf [128]; ファイル= fopen( "fileio.txt"、 "w"); if(!file)gotoエラー; fputs( "hello \ n"、file); fflush(ファイル); fputs( "world \ n"、file); fclose(ファイル); ファイル= fopen( "fileio.txt"、 "r"); if(!file)gotoエラー; fgets(buf、sizeof(buf)、file); / 'hello'をスキップする/ fgets(buf、sizeof(buf)、file); / '単語'を取得* / fclose(file); fputs(buf、stdout); 0を返します。エラー:fputs( "ファイルを開けませんでした\ n"、stderr); 1を返します。}
FelipeC 2010

元のCポストでのすてきなクリーンコーディング(適切なエラーチェックの多く)(長さを多少吹き飛ばします)。
xagyg

29

シェルスクリプト(UNIX)

#!/bin/sh
echo "hello" > fileio.txt
echo "world" >> fileio.txt
LINE=`sed -ne2p fileio.txt`
echo $LINE

実際には、sed -n "2p"パーツは2行目を印刷しますが、質問では2行目を変数に格納してから印刷するように求められるので、... :)


9
理由はわかりませんが、これは大好きです:)
Federico klez Culloca

もちろん重要です。素敵な回答と+1への貢献に感謝
ブロック・ウルフ

標準を/ dev / nullに送信しないのはなぜですか?
ガンボ

シェルビルトインのみを使用して、ややシンプルで高速なバージョンがあります(個別のプロセスをforkしてforkを呼び出すのではなくsed)。ここでは、stackoverflow.com
Brian Campbell

@ガンボ、では、どうやって2行目を手に入れますか? LINE=`foo`の出力をfoo変数に取り込みますLINE
ストレッジャー2010

27

Linux上のx86アセンブラ(NASM)

私は7年間asmに触れていなかったので、これをハッキングするためにgoogleを少し使用する必要がありましたが、それでも機能します;)100%正しくないことはわかっていますが、ちょっと:D

OK、動作しません。申し訳ありませんがこれ。それは印刷しない一方でworld、最終的に、それはファイルからそれを印刷しませんが、からecxどのライン27に設定されています。

section .data
hello db 'hello',10
helloLen equ $-hello
world db 'world',10
worldLen equ $-world
helloFile db 'hello.txt'

section .text
global _start

_start:
mov eax,8
mov ebx,helloFile
mov ecx,00644Q
int 80h

mov ebx,eax

mov eax,4
mov ecx, hello
mov edx, helloLen
int 80h

mov eax,4
mov ecx, world
mov edx, worldLen
int 80h

mov eax,6
int 80h

mov eax,5
mov ebx,helloFile
int 80h

mov eax,3
int 80h

mov eax,4
mov ebx,1
int 80h

xor ebx,ebx
mov eax,1
int 80h

使用される参照:http : //www.cin.ufpe.br/~if817/arquivos/asmtut/quickstart.html

http://bluemaster.iu.hio.no/edu/dark/lin-asm/syscalls.html

http://www.digilife.be/quickreferences/QRC/LINUX%20System%20Call%20Quick%20Reference.pdf


100%機能するように修正しますか?そうでない場合は、それを削除して、機能しているバージョンがその場所に配置できるようにします。
kirk.burleson 2010

4
ちょっと面白いのは、Cの例である、より高水準の言語であると想定されているものは、この言語とほぼ同じ長さであるということです... =)
Jani Hartikainen 2010

1
@ジャニ:でも、少なくとも少しは理解しやすいです。
sbi


21

JavaScript-node.js

まず、多くの入れ子になったコールバック。

var fs   = require("fs");
var sys  = require("sys");
var path = "fileio.txt";

fs.writeFile(path, "hello", function (error) {
    fs.open(path, "a", 0666, function (error, file) {
        fs.write(file, "\nworld", null, "utf-8", function () {
            fs.close(file, function (error) {
                fs.readFile(path, "utf-8", function (error, data) {
                    var lines = data.split("\n");
                    sys.puts(lines[1]);
                });
            });
        });
    });
});

少しクリーナー:

var writeString = function (string, nextAction) {
    fs.writeFile(path, string, nextAction);
};

var appendString = function (string, nextAction) {
    return function (error, file) {
        fs.open(path, "a", 0666, function (error, file) {
            fs.write(file, string, null, "utf-8", function () {
                fs.close(file, nextAction);
            });
        });
    };
};

var readLine = function (index, nextAction) {
    return function (error) {
        fs.readFile(path, "utf-8", function (error, data) {
            var lines = data.split("\n");
            nextAction(lines[index]);
        });
    };
};

var writeToConsole = function (line) {
    sys.puts(line);
};

writeString("hello", appendString("\nworld", readLine(1, writeToConsole)));

@Ionut:多くの貢献をありがとう+1
Brock Woolf

4
@デイブ、それはブラウザで見つかったJSではありません。つまり、構文的にも意味的にも、これは同じJSですが、標準ライブラリが異なるだけです。node.jsプラットフォームのstdlibを使用しました。nodejs.orgを
Ionuț G. Stan

5
このコードは継続を求めています。涙が聞こえます。
マット

2
行数が下のASMソリューションの数とほぼ一致しているのはおかしいのではないですか。
kizzx2 2010

1
@マットはい、継続、またはモナドもここで役立ちます。
Martijn 2010

21

Common Lisp

(defun main ()
  (with-open-file (s "fileio.txt" :direction :output :if-exists :supersede)
    (format s "hello"))
  (with-open-file (s "fileio.txt" :direction :io :if-exists :append)
    (format s "~%world")
    (file-position s 0)
    (loop repeat 2 for line = (read-line s nil nil) finally (print line))))

1
"lisp"と呼ばれる言語の場合、もっと多くの "s"文字が含まれるはずです:)
iwasrobbed

18

パワーシェル

sc fileio.txt 'hello'
ac fileio.txt 'world'
$line = (gc fileio.txt)[1]
$line

3
これは素晴らしくてきれいです。やったパワーシェル。
ジェイバズジ2010

引用に関するあなたの論理に同意します。それらを削除した理由は、このスクリプトが実際にはコンパクトであるために一番上にあることに気付いたため、さらに小さくしたかったのです。gc代わりにの使用はcat理にかなっています:-) 最初にget-alias私に与えましたcat(私はPowerShellをあまり使用していません)。
Lasse Espeholt、2010

4
くそー、もっと短いものはありますか?
2010

18

シェルスクリプト

ここでは、むしろのような外部コマンドを呼び出すよりも、単に組み込みコマンドを使用して、シェルスクリプトですsedtail以前の応答が行ったように。

#!/bin/sh

echo hello > fileio.txt             # Print "hello" to fileio.txt
echo world >> fileio.txt            # Print "world" to fileio.txt, appending
                                    # to what is already there
{ read input; read input; } < fileio.txt  
                                    # Read the first two lines of fileio.txt,
                                    # storing the second in $input
echo $input                         # Print the contents of $input

重要なシェルスクリプトを作成するときは、ビルトインをできるだけ使用することをお勧めします。別のプロセスの生成が遅くなる可能性があるためです。私のマシンでの簡単なテストから、sedソリューションはを使用するよりも約20倍遅くなりますread。この場合のようにsed1回呼び出す場合は、気付かないほど速く実行されるため、それほど問題にはなりませんが、数百回または数千回実行する場合は、合計。

構文に慣れていない人のために、{そして} 現在のシェル環境でコマンドのリストを実行する(とは対照的に、(そして)、私たちは現在のシェル環境で動作する必要があり、我々は後に、変数の値を使用できるようにサブシェルを作成します) 。からリダイレクトすることによって作成された同じ入力ストリームでコマンドを両方とも動作させるには、コマンドをグループ化する必要がありますfileio.txt。単純にを実行した場合read < fileio.txt; read input < fileio.txt、ファイルが閉じられ、2つのコマンド間で再度開かれるため、最初の行を取得します。シェルの構文の特異性に起因する({}メタ文字とは反対に、予約語です)、我々は分離する必要がある{}残りのコマンドからはスペースで区切り、コマンドのリストは;。で終了します。

read組み込みは、変数の名前はに読み込むための引数として取ります。入力行を消費し、空白文字で入力を分割します(技術的には$IFS、デフォルトで空白文字になり、空白文字は空白、タブ、または改行のいずれかで分割することを意味します)の内容に従って入力を割り当てます各単語を順番に指定された変数名に割り当て、行の残りの部分を最後の変数に割り当てます。変数を1つだけ指定しているので、行全体がその変数に入れられます。$input最初の行の内容は気にしないので、変数を再利用します(Bashを使用している場合は、変数名を指定できなかっただけでなく、移植可能にするために、常に少なくとも1つの名前を指定する必要があります)。

ここで私が行うように、一度に1行ずつ読み取ることができますが、より一般的なパターンは、whileループでラップすることです。

while read foo bar baz
do
  process $foo $bar $baz
done < input.txt

3
非常に素晴らしい。(一時的ではあるが)私は何かを学んだ。
Potatoswatter 2010

あなたの貢献ブライアンをありがとう。
Brock Woolf

まったく具合が悪い!良い意味で:-)
ヘルパーメソッド

18

Clojure

(use '[clojure.java.io :only (reader)])

(let [file-name "fileio.txt"]
  (spit file-name "hello")
  (spit file-name "\nworld" :append true)
  (println (second (line-seq (reader file-name)))))

または同等に、スレッド化マクロ->(括弧除去とも呼ばれます)を使用します。

(use '[clojure.java.io :only (reader)])

(let [file-name "fileio.txt"] 
  (spit file-name "hello") 
  (spit file-name "\nworld" :append true) 
  (-> file-name reader line-seq second println))

1
WTF、過去50年間、Lisp / Schemeが素晴らしいと言った人はほとんどいませんでした。
Ionuț G. Stan 2010

11
待って、spit本当にファイルへの書き込み関数の名前ですか?
Sam Stokes

4
Clojureは間違いなく揺るぎません!
kirk.burleson 2010

1
@ [Sam Stokes]コアにはslurpと呼ばれる関数があり、ファイル全体を文字列に読み込んで返します。spitは正反対です。問題は何ですか?line-seqのように、さまざまな方法で同様のことを行う他の関数があります。
レイン

4
確かに、@ kirk.burleson RocksはJavaよりも優れています。:)
レイン

17

F#

let path = "fileio.txt"
File.WriteAllText(path, "hello")
File.AppendAllText(path, "\nworld")

let secondLine = File.ReadLines path |> Seq.nth 1
printfn "%s" secondLine

1
F#。いいね。あなたの貢献をありがとう。
Brock Woolf

16

ベーシック

私は10年近くBASICを使用していませんが、この質問は私の知識をすばやくブラッシュアップする理由になりました。:)

OPEN "fileio.txt" FOR OUTPUT AS 1
PRINT #1, "hello"
PRINT #1, "world"
CLOSE 1

OPEN "fileio.txt" FOR INPUT AS 1
LINE INPUT #1, A$
LINE INPUT #1, A$
CLOSE 1

PRINT A$

10年経ってもまだこれができるのは素晴らしいことです。よくやりました。あなたの貢献に感謝します。
Brock Woolf

もちろん私は頭のてっぺんからそれをしませんでした:いくつかのものを調べるのに数分かかりました。
カサブランカ、2010

ええ、もちろん。まだよくできました。
Brock Woolf、

BASICの最もクラシックなバージョンでは行番号は必要ありませんか???
祐二

@ゆうじ:「最もクラシックなバージョン」ではそうですが、90年代の初めから必要だったバージョンはないと思います。
カサブランカ2010

16

Objective-C

NSFileHandle *fh = [NSFileHandle fileHandleForUpdatingAtPath:@"fileio.txt"];

[[NSFileManager defaultManager] createFileAtPath:@"fileio.txt" contents:nil attributes:nil];

[fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];
[fh writeData:[@"\nworld" dataUsingEncoding:NSUTF8StringEncoding]];

NSArray *linesInFile = [[[NSString stringWithContentsOfFile:@"fileio.txt" 
                                             encoding:NSUTF8StringEncoding 
                                                error:nil] stringByStandardizingPath] 
                          componentsSeparatedByString:@"\n"];

NSLog(@"%@", [linesInFile objectAtIndex:1]);

17
Objective-Cは好きではありません。Javaのような言語から来るとき、構文はとても異質に見えます。
Faisal Abid、2010

5
Objective-Cの秘密は、Xcodeがすべてのコード補完を行うことです。長いメソッド名を覚えておく必要はありません。彼らは確かにあなたのコードをはるかに読みやすくします
Brock Woolf

7
そして、私はc ++構文がすでに最悪に見えたと思いました。
ヒキガエル2010

6
Stackoverflow構文の蛍光ペンが正しく色付けされないため、Objective-Cは見栄えが悪いだけです。
Brock Woolf、

4
これがリストの一番下にあるとは信じられません!また、Javaの人たちがObjective-Cは見苦しいとコメントしていますが、同じファイルを書き込むのに何行かかったかわかりましたか?私は以前はJavaの愛好家でしたが、Objective-Cはそれが私の心に浸透していると思います。
カイル

16

Perl

#!/usr/bin/env perl

use 5.10.0;
use utf8;
use strict;
use autodie;
use warnings qw<  FATAL all     >;
use open     qw< :std  :utf8    >;

use English  qw< -no_match_vars >;

# and the last shall be first
END { close(STDOUT) }

my $filename = "fileio.txt";
my($handle, @lines);

$INPUT_RECORD_SEPARATOR = $OUTPUT_RECORD_SEPARATOR = "\n";

open($handle, ">",  $filename);
print $handle "hello";
close($handle);

open($handle, ">>", $filename);
print $handle "world";
close($handle);

open($handle, "<",  $filename);
chomp(@lines = <$handle>);
close($handle);

print STDOUT $lines[1];

15
字句ファイルハンドルはどうですか、3つの引数が開いていますか?
MkV 2010

6
非語彙ファイルハンドルはスタックオーバーフローでは使用しないでください。実際にそれらが必要になることはめったになく、初心者はそれらが存在することさえ決して示されるべきではありません。
Ether

4
同じことが2つの引数openにも当てはまります。StackOverflowでは絶対に使用しないでください。実際には使用しないでください。
rpkelly

2
私は3引数のオープンなレキシカルファイルハンドルを使用しているので、実際には構文エラーと見なされます。そしてそうなるはずです。/ meは、そうするためにモジュールを書くことを熟考しています。
ケントフレドリック2010

2
「単項オープンにも用途があります」、その用途はありますが、そのしくみを検討したその日は困ったように感じ、必要だと思う人に会うたびに「確かに別の方法がある」と思います。perl -we 'for (q{ps aux |}){ open _; print <_>; }'
ケントフレドリック2010年

15

R:

cat( "hello \ n"、file = "fileio.txt")
cat( "世界\ n"、file = "fileio.txt"、append = TRUE)
line2 = readLines( "fileio.txt"、n = 2)[2]
猫(2行目)

15

PHP

<?php

$filePath = "fileio.txt";

file_put_contents($filePath, "hello");
file_put_contents($filePath, "\nworld", FILE_APPEND);

$lines = file($filePath);

echo $lines[1];

// closing PHP tags are bad practice in PHP-only files, don't use them

それは素晴らしいことです。貢献してくれてありがとう。
Brock Woolf、

20
または、C実装を使用してドル記号を追加することもできます。
ケンダルホプキンス

@stragerわからない。それがオプティナルであり、それなしでそれが実際に優れていることを知らない人々がいます。
Ionuț G. Stan 2010

6
誰かが気になった場合に備えて、彼が終了タグを省略した理由は、それを含め、末尾に空白を残した場合、「ヘッダーがすでに送信された」エラーが発生するリスクがあるためです。
ビルH

ノーのための参考?>framework.zend.com/manual/en/...
cdmckay

15

ジャワ

import java.io.*;
import java.util.*;

class Test {
  public static void  main(String[] args) throws IOException {
    String path = "fileio.txt";
    File file = new File(path);

    //Creates New File...
    try (FileOutputStream fout = new FileOutputStream(file)) {
      fout.write("hello\n".getBytes());
    }

    //Appends To New File...
    try (FileOutputStream fout2 = new FileOutputStream(file,true)) {
      fout2.write("world\n".getBytes());
    }

    //Reading the File...
    try (BufferedReader fin = new BufferedReader(new FileReader(file))) {
      fin.readLine();
      System.out.println(fin.readLine());
    }       
  }
}

36
@ブロック:最近のJavaは遅くありません。冗長ですが、遅くはありません。そのようなコメントはしないでください。JVMの人々を傷つけます。: '|
missingfaktor 2010

9
Javaが遅いと言った人は、Javaの盲目的な嫌悪者か、岩の下に住んでいます。起動するプラットフォームに依存しないため、JavaはCと同じかそれ以上の速度で動作します。
NullUserException 2010

4
@ミッシング・ファクター:そうですか?
ジェリーコフィン

19
実行速度は、プログラマーが持っている小便コンテストの最も遅れた形です。それは常に、ジョブに適切なツールを選択し、実行速度などのランダムなメトリックを選択し、それに重要なヒープを割り当てることは、特に実行速度が大多数のタスクにとってひどく重要ではないため、それが十分に高速です(Javaはほとんどすべてのものです)
Matt Briggs

11
「ハードワイヤリングはマシンコードより速い」、「マシンコードはasmより速い」、「asmはCより速い」、「CはJavaより速い」、「何とか何とか」...どれだけの手掛かりさえありますか間接はすでにマシンコードとCPUの間にありますか?マイクロコード、予測オプティマイザ、命令/データキャッシュ、デコーダなど。C/ asmでの動的割り当てによって引き起こされる非決定性は言うまでもありません。Javaやその他の安全な言語は、間接化のもう1つの小さなステップにすぎません。大したことではありません。あなたは永遠にあなたの原始的な形態にとどまるか、私たちと共に進化することができます。
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

14

C ++

#include <limits>
#include <string>
#include <fstream>
#include <iostream>

int main() {
    std::fstream file( "fileio.txt",
        std::ios::in | std::ios::out | std::ios::trunc  );
    file.exceptions( std::ios::failbit );   

    file << "hello\n" // << std::endl, not \n, if writing includes flushing
         << "world\n";

    file.seekg( 0 )
        .ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
    std::string input_string;
    std::getline( file, input_string );

    std::cout << input_string << '\n';
}

やや少なめに

#include <string>
#include <fstream>
#include <iostream>
using namespace std;

int main() {
    fstream file( "fileio.txt", ios::in | ios::out | ios::trunc  );
    file.exceptions( ios::failbit );   

    file << "hello" << endl
         << "world" << endl;

    file.seekg( 0 ).ignore( 10000, '\n' );
    string input_string;
    getline( file, input_string );

    cout << input_string << endl;
}

1
すごい!+1を提供していただきありがとうございます
Brock Woolf、

14
c ++の構文がいかに醜いかを忘れてしまいました。
ヒキガエル2010

これ、ほとんどのC ++コードがどのように見えるかに比べて、ひどいです。主な問題は、標準ライブラリで定義されている適切な定数が構文にないことです。行のサイズに制限がない<limits>ことを伝えるignoreためだけに含める必要があることは、私を驚かせます。
Potatoswatter 2010

8
@ハンス:それを明確にしたいですか?個人的には、I / O 言語ではなくライブラリに属していると思います。私がプログラミングするすべての言語(C、C ++、Java、Pythonなど)
Chinmay Kanchi

2
LinusがC ++は醜いと言っている理由がわかりました。(違反なし)
kizzx2 2010

13

行く

package main

import (
  "os"
  "bufio"
  "log"
)

func main() {
  file, err := os.Open("fileio.txt", os.O_RDWR | os.O_CREATE, 0666)
  if err != nil {
    log.Exit(err)
  }
  defer file.Close()

  _, err = file.Write([]byte("hello\n"))
  if err != nil {
    log.Exit(err)
  }

  _, err = file.Write([]byte("world\n"))
  if err != nil {
    log.Exit(err)
  }

  // seek to the beginning 
  _, err = file.Seek(0,0)
  if err != nil {
    log.Exit(err)
  }

  bfile := bufio.NewReader(file)
  _, err = bfile.ReadBytes('\n')
  if err != nil {
    log.Exit(err)
  }

  line, err := bfile.ReadBytes('\n')
  if err != nil {
    log.Exit(err)
  }

  os.Stdout.Write(line)
}

23
この言語の名前は「type」に変更する必要があります
Aiden Bell

os.O_RDWR | os.O_CREATE, 0666Goでの基本的なファイルI / Oにも、このジャンクが必要ですか?
ジョーイアダムス

1
または、「Stop」に名前を変更する必要があるかもしれません
xagyg

16
30年の進化と言語設計を考えても、Cと同じくらいエラーチェックコードを書くのが難しい新しい言語を発明できたことは驚くべきことです。Javaでさえ冗長ではありません!
DK。

5
うわー...この例では、Goは非常に失敗しているようです
Alessandro Stamatto 2010

12

アーラン

おそらく最も慣用的なErlangではありませんが、

#!/usr/bin/env escript

main(_Args) ->
  Filename = "fileio.txt",
  ok = file:write_file(Filename, "hello\n", [write]),
  ok = file:write_file(Filename, "world\n", [append]),
  {ok, File} = file:open(Filename, [read]),
  {ok, _FirstLine} = file:read_line(File),
  {ok, SecondLine} = file:read_line(File),
  ok = file:close(File),
  io:format(SecondLine).

12

Emacs Lisp

Emacsは主にテキストエディターであると言う人もいます[1]。したがって、Emacs Lispはあらゆる種類の問題を解決するために使用できますが、テキストエディターのニーズに合わせて最適化されています。テキストエディター(明らかに)は、ファイルの処理方法に関して非常に具体的なニーズがあるため、Emacs Lispが提供するファイル関連の機能に影響します。

基本的に、これはEmacs Lispがファイルをストリームとして開き、部分的に読み取る関数を提供しないことを意味します。同様に、最初にファイル全体をロードせずにファイルに追加することはできません。代わりに、ファイルは完全に[2]バッファーに読み込まれ[3]、編集されてからファイルに再度保存されます。

必須タスクの場合、これにはEmacs Lispを使用するのが適切であり、編集を伴わない何かを実行したい場合は、同じ関数を使用できます。

ファイルに何度も追加したい場合、これは大きなオーバーヘッドを伴いますが、ここで示されているように可能です。実際には、通常、ファイルに書き込む前に、手動またはプログラムでバッファの変更を完了します(以下の例の最初の2つのs式を組み合わせるだけです)。

(with-temp-file "file"
  (insert "hello\n"))

(with-temp-file "file"
  (insert-file-contents "file")
  (goto-char (point-max))
  (insert "world\n"))

(with-temp-buffer
  (insert-file-contents "file")
  (next-line)
  (message "%s" (buffer-substring (point) (line-end-position))))

[1]少なくとも私はそれをOSと呼ぶことはしません。代替UIはい、OSいいえ。

[2]ファイルの一部のみをロードできますが、これはバイト単位でのみ指定できます。

[3]バッファは、文字列に似たデータ型であると同時に、「ファイルの編集中に表示されるもの」でもあります。バッファの編集中はウィンドウに表示されますが、バッファは必ずしもユーザーに表示される必要はありません。

編集:バッファーに挿入されているテキストを確認したい場合は、明らかにそれを表示し、アクション間でスリープする必要があります。Emacsは通常、ユーザー入力を待機しているときにのみ画面を再表示するため(そしてスリープは入力を待機することと同じではありません)、強制的に再表示する必要もあります。これはこの例で必要です(2番目のsexpの代わりに使用)。実際には、「redisplay」を一度も使用する必要はありませんでした。そうです、これは醜いですが...

(with-current-buffer (generate-new-buffer "*demo*")
  (pop-to-buffer (current-buffer))
  (redisplay)
  (sleep-for 1)
  (insert-file-contents "file")
  (redisplay)
  (sleep-for 1)
  (goto-char (point-max))
  (redisplay)
  (sleep-for 1)
  (insert "world\n")
  (redisplay)
  (sleep-for 1)
  (write-file "file"))

1
よかった、ありがとう。これを拡張して、ある種のマクロのように、実際にファイルを開いて入力する「ゴースト」が見えるようにすることは可能ですか?
zedoo 2010

11

Windowsバッチファイル-バージョン#2

@echo off
echo hello > fileio.txt
echo world  >> fileio.txt
set /P answer=Insert: 
echo %answer%  >> fileio.txt
for /f "skip=1 tokens=*" %%A in (fileio.txt) do echo %%A

最後の恐ろしいループの検索を説明するために、ファイルにはhello(改行)ワールドしかないと想定しています。したがって、最初の行をスキップし、2番目の行だけをエコーし​​ます。

変更ログ

  • 2-Opps、要件を読み違えているか、要件が変更された。ファイルから最後の行を読み取ります


きちんとした。あなたの貢献に感謝します。
Brock Woolf

手順4)は、作成したファイルから読み取ると理解しています。
devio 2010

@devio-要件が変更されているか、誤って読んだだけです...とにかく、そのようなソリューションが存在するかどうかを確認します
TheLQ

11

Scala:

標準ライブラリを使用:

val path = "fileio.txt"
val fout = new FileWriter(path)
fout write "hello\n"
fout.close()
val fout0 = new FileWriter(path, true)
fout0 write "world\n"
fout0.close() 
val str = Source.fromFile(path).getLines.toSeq(1)
println(str)

Josh SuerethのScala-ARMライブラリを使用する

val path = "fileio.txt"
for(fout <- managed(new FileWriter(path))) 
  fout write "hello\n"
for(fout <- managed(new FileWriter(path, true))) 
  fout write "world\n"
val str = Source.fromFile(path).getLines.toSeq(1)
println(str)      


多くの人々が同じファイル記述子を使用して2つの文字列を書き込んだので、私はその方法も私の回答に含めています。

標準ライブラリを使用:

val path = "fileio.txt"
val fout = new FileWriter(path)
fout write "hello\n"
fout write "world\n"
fout.close()
val str = Source.fromFile(path).getLines.toSeq(1)
println(str)

Josh SuerethのScala-ARMライブラリを使用する

val path = "fileio.txt"
for(fout <- managed(new FileWriter(path))){
  fout write "hello\n"
  fout write "world\n"
}
val str = Source.fromFile(path).getLines.toSeq(1)
println(str)

これはclose()の代わりにflush()を使用すると見栄えがよくなると思います... FileWriterの再インスタンス化はありません。
Radtoo 2010

2
@Radtoo:追加操作を表示する必要がありました。それが私がこのようにした理由です。
missingfaktor 2010

@Radtoo:このスレッドで他の回答を確認した後、私は最終的にその方法を私の回答に含めることを決定しました。確認してください。(ただし、元のコードは削除していません。)
missingfaktor 2010

@Faktor getLines().toList()getLines().toSeqありません。どちらを怠惰にする必要がありますか?
Elazar Leibovich、2010

@エラザール:良い提案。ありがとう。:)
missingfaktor 2010

11

グルーヴィー

new File("fileio.txt").with { 
    write  "hello\n"
    append "world\n"   
    println secondLine = readLines()[1]
}

貢献してくれてありがとう。
Brock Woolf、

3
あなたは「世界」の部分で不正行為をしています。追加ではなく、同じファイル記述子に書き込むだけです。
OTZ、2010

元の投稿の3番目の説明では、「最初の行を書き込んだ後、テキストファイルを再度開く必要はありません」
Wayne Keenan '22
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.