모든 프로그래밍 언어의 파일 I / O [닫기]


127

이것은 모든 프로그래머가 때때로 가지고있는 일반적인 질문이어야합니다. 텍스트 파일에서 줄을 어떻게 읽습니까? 다음 질문은 항상 어떻게 다시 작성해야하는지입니다.

물론 대부분의 사람들은 일상적인 프로그래밍 (응답에 사용하기에 좋은)에서 높은 수준의 프레임 워크를 사용하지만 때로는 낮은 수준에서 수행하는 방법을 아는 것이 좋습니다.

나 자신에 그것을하는 방법을 알고 C, C++그리고 Objective-C있지만, 확실히에만 도움으로 우리의 IO 우리의 파일을 수행하는 어떤 언어에 대한 더 나은 결정을 내릴 경우는, 인기 모든 언어에서 어떻게하는지 볼 수 편리 할 것입니다. 특히 : 나는 그것처럼 문자열 조작 언어 수행 방식을 볼 수 재미있을 것이라고 생각 python, ruby물론 perl.

여기 에서 우리는 모두 우리 프로필에 출연 하고 새로운 언어로 파일 I / O 를 수행해야 할 때 참조 할 수있는 커뮤니티 리소스 를 만들 수 있다고 생각 합니다. 우리가 매일 다루지 않는 언어에 노출되는 것은 말할 것도 없습니다.

이것은 당신이 대답 해야하는 방법입니다 :

  1. " fileio.txt " 라는 새 텍스트 파일을 만듭니다.
  2. 텍스트 파일에 첫 번째 줄 "hello"를 작성하십시오.
  3. 두 번째 줄 "world"를 텍스트 파일에 추가하십시오.
  4. 두 번째 줄 "world"를 입력 문자열로 읽습니다.
  5. 입력 문자열을 콘솔에 인쇄하십시오.

설명:

  • 답변 당 하나의 프로그래밍 언어로만이를 수행하는 방법을 보여 주어야합니다.
  • 텍스트 파일이 미리 존재하지 않는다고 가정
  • 첫 줄을 쓴 후 텍스트 파일을 다시 열 필요가 없습니다

언어에는 특별한 제한이 없습니다. C, C++, C#, Java, Objective-C모든 중대하다.

당신이 그것을에서 수행하는 방법을 알고있는 경우에 Prolog, Haskell, Fortran, Lisp, 또는 Basic마우스 오른쪽 진행하시기 바랍니다.


9
이 문제는 특정 언어를 검색 할 때 모든 언어로 태그가 지정되거나 태그가 지정 될 수 없으므로 표시되지 않는다는 것입니다.
ChrisF

21
이 질문이 왜 종결되는지 이해가되지 않습니다. 사람들이 정보를 찾도록 돕는 것이이 사이트의 목적이 아닙니까? 누군가가 C에서 (IO와 같은) 무언가를하는 법을 알고 파이썬에서 똑같은 일을하는 법을 배우고 싶다면, 그들이 나란히 볼 수 있도록 도와줍니다.
Slapout

18
또한 왜 이것이 폐쇄되었는지 이해하지 못합니다. "... 최소한의 문자 수 ..."라는 단어가 포함되어 있지 않기 때문인 것 같습니다. 코드 골프는 재미있는 운동입니다. 그러나 모든 로제타 스톤 질문이 모든 대답에서 난독 화되고 작은 코드를 만드는 것이 실제로 유용합니까?
스펜서 넬슨

12
이것이 Q & A 사이트에 어떻게 적합한 지 이해하지 못합니다. 최소한 코드 골프에서는 답변에 투표하는 다소 객관적인 표준이 있습니다. 이것으로 : Haskell을 좋아하는 사람은 몇 명입니까? 이와 같은 질문은 가능한 모든 유형의 컨텐츠를 하나의 시스템으로 설계하려고하는 것과 같습니다. 인터넷을 처리하는 데있어 무엇이 문제입니까?

11
왜 이것이 잘 작동하지 않습니까? 각 접근 방식의 장단점에 대한 정보가 없습니다 (어떤 언어가 한 가지 방법 만 지원합니까?). 각 언어의 장단점에 대한 토론은 없습니다. 제한된 범위는 bajiliion이 "모든 언어로"질문을 분리해야 함을 의미합니다. 그리고 무엇보다도 각 답변의 품질에 대한 커뮤니티 조정이 없습니다. 사람들이 투표 할 때 왜 중재를하지 않습니까? 각 언어마다 하나의 답변 만 있어야하므로 사람들은 자신의 분야에서 여러 대안을 볼 수있는 충분한 답변을 읽지 못합니다.
dmckee ---

답변:


48

파이썬 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 번째 줄만 인쇄하려면 전체 파일을 읽을 필요가 없습니다. 파이썬에서 파일의 n 번째 라인을 얻는 더 좋은 방법이 있습니다 : 파이썬 3에서 xreadlines ()를 대체하는 것은 무엇입니까? .

  • 이 내용은 무엇입니까? with 문은 변수 f 를 open () 호출에서 반환 된 스트림 객체 로 사용할 수있는 코드 블록을 시작합니다 . with 블록이 끝나면 파이썬은 자동으로 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)
    

    필자는 쓰기 (모드 'w'), 추가 (모드 'a'), 읽기 (모드 'r', 기본값)의 세 가지 작업의 차이점을 강조하기 위해 블록이있는 세 가지를 사용했습니다.


19
나는 아무도 readlines()[1]예제 코드로 작성해서는 안된다고 생각 합니다. 이 경우 파일에 두 줄만 있다는 것을 알 수 있지만 좋은 해결책이라고 가정하는 사람은 백만 줄짜리 파일에서 시도하여 다소 놀랄만 한 결과를 얻을 수 있습니다.
Porculus

14
readlines ()가있는 @Porculus 우리는 파일의 모든 줄을 거치지 않습니다. 이것은 파이썬 3입니다. readlines ()는 목록이 아닌 반복자를 반환합니다. 따라서 파일의 처음 두 줄만 읽습니다. 이것은 파이썬 2의 xreadlines ()와 비슷합니다 (파이썬 3에는 존재하지 않습니다).
snakile

7
@snakile : readlines()반복자반환하기 위해 무언가를 인용 할 수 있습니까? (목록이 아님) 참고 : 일반적으로 반복자를 색인 할 수는 없습니다.
SilentGhost

8
@SilentGhost "Dive into Python 3"을 인용하고 있습니다. "readlines () 메서드는 이제 반복자를 반환하므로 xreadlines ()가 Python 2에있는 것처럼 효율적입니다." 이 문장을 diveintopython3.org/porting-code-to-python-3-with-2to3.html 에서 검색하십시오 . 둘째, 파이썬 3에서는 반복자를 인덱싱 할 수 있습니다. 쉘에 range (10) [4]를 입력합니다 (range ()는 파이썬 2와 반대로 파이썬 3에서 반복자를 반환합니다. 여기서 파이썬은 range ()가리스트를 반환합니다). range (N) [i]는 O (N)이 아니라 O (1)이 아니라 O (i)에서 수행됩니다.
snakile

5
@ snakile : 귀하의 의견은 여러 수준에서 잘못되었습니다. 먼저 readlines는 Python 3에서 목록을 반환합니다 (테스트하고 참조하십시오). 주어진 코드는 전체 파일을 읽습니다. 둘째, 반복자는 Python 2 또는 3에서 색인을 생성 할 수 없습니다. range객체는 O (1)에서 수행되는 색인 생성을 특별히 지원합니다.
interjay

242

LOLCODE

사양 은 최소한으로 말하면 스케치되지만 최선을 다했습니다. downvoting을 시작하자! :) 여전히 재미있는 운동이라고 생각합니다.

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

85
내가 본 것보다 LOLCODE가 더 읽기 쉽다고 생각하는 것이 슬픈가요?
Joel

13
자연어처럼 느끼는 정도를 간파하고 있습니다.
Abhinav Sarkar

19
리버스 심리학은 프로그래머에게 반사적 인 행동이기 때문에 다운 보트가 예상된다고 말하는 것은 SO에 대한 업 보트를 보장합니다.
Brock Woolf

13
PLZ? / AWSUM THX / O NOES는 정말 대단합니다. 이것은 전능 한 것 같습니다.
Calvin1602

43

뇌 *** k

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

26
'-'를 그리워 했습니까? ;)
에이든 벨

2
오 노력. 기록적인면에서 글쓰기에 시간이 얼마나 걸렸습니까?
Riduidel

그리고 여러 줄로 나눌 수 없습니까? 최고의 언어
TheIronKnuckle

42

코볼

다른 사람은 없었기 때문에 ......

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
순수한 굉장함을 위해 백만 회 이상 투표해야합니다 +1
Brock Woolf

1
"이 언어는 여전히 주변에 있습니다."+1 = D
missingfaktor

3
집에서 이것을 시도 할 때 조심하십시오. 귀하의 코볼 컴파일러는 이러한 현대 가변 길이 라인을 좋아하지 않을 수도 있습니다 ...
Stephan Eggermont

야, 이것은 녹슨 추억을 되 찾는다. 나는 그것이 요구 사항을 충족한다고 생각하지 않습니다 ...
EvilTeach

지금 AcuCOBOL로 코드를 작성 중입니다! 그런데 "I / O"의 "I"부분은 어디에 있습니까?
Buggabill

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
'전능 한'하스켈. 기부 :) 주셔서 감사합니다
브록 울프

3
@Andreas Rejbrand 거의 확실히 그는 '수'잊었 해요
페데리코 정보 Klez Culloca에게

4
Haskell에는 특정 유형의 앱을 수행 한 후 Haskell에서 유용하고 중요한 기본 I / O에 대한 여러 가지 접근 방식이 있습니다. cabal / hackage의 text 및 bytestring 패키지를 사용하면 다양한 인코딩을 처리 할 수 ​​있으며 iteratee 및 enumerate와 같은 다양한 iteratee 스타일 패키지는 증분 io를 수행하는 데 가장 잘 알려진 추상화를 나타냅니다. 또한 parsec과 같은 libs 구문 분석과 attoparsec lib에만 증가하는 바이트 문자열이 중요합니다. Haskellers는 io 디자인 선택을 탐색하기 위해 매우 철저한 접근 방식을 취했습니다. 생존 할 예 게으른 IO 및 연속성을 포함
카터 Tazio Schonwald

4
Yuji : 기본적으로 부정 행위. Haskell은 부작용에 대한 특별한 컴파일러 지원을 가진 type의 것을 제외하고 는 순수 기능 언어 IO a입니다. (때문에 순도가 다른 곳에서 보존 어떤 부작용을 관찰 수행하거나 유형 인 IO a타입 시스템은 순수한 프로그램 체류의 나머지 부분을 보장하므로.)
샘 스톡스

4
그것은 IO모나드이지만, 그것이 부작용을 허용하는 이유는 아닙니다. 모나드가되는 것은 명령형으로 보이는 구문을 작성할 수있게하는 것입니다. 특수한 언어 지원과 함께 부작용이 현명한 순서로 발생하는지 확인하므로 파일에 쓰기 전에 파일에서 읽지 마십시오. .
샘 스톡스

35

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

10
좋은. 언젠가 D를 배워야 할 것 같습니다.
helpermethod

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

3
@lasseespeholt, 네 말이 맞아. 나는 그것을 고쳤다.
Wayne Conrad

5
varname을 대문자로하여 'PATH'라고 말할 이유가 없습니다. 그냥 '경로'라고 말하십시오.
OTZ

2
@otz 상수입니다. 루비의 상수는 대문자로 시작하면된다.
Sirupsen

1
@Thomas Ahle : File.open블록과 함께 사용 하면 파일이 열리고 블록으로 전달 된 다음 자동으로 닫힙니다.
Matchu

33

씨#

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 #에서는 매우 짧습니다. 덕분에 기여를위한
브록 울프를

13
참고 : File.ReadLines는 .NET 4에만 해당
kirk.burleson

5
C #의 불쾌한 구문
Aiden Bell

3
@Aiden Bell : 어떤 언어와 관련이 있습니까?
zfedoran

2
@Aiden Bell-이 답변은 간결하게 읽을 수 있도록 노력하고 있습니다. C #에서 동일한 것을 달성하는 많은 "좋은"방법이 있습니다. 보다 현실적인 예는 dotnetperls.com/file-handling 을 참조하십시오 .
Dan Diplo

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 ()를 두 번 호출합니까?
kirk.burleson

2
두 번째 줄은 stdout으로 인쇄하려는 줄이므로
JeremyP

1
#include <stdio.h> int main (void) {파일 파일; 숯불 buf [128]; 파일 = fopen ( "fileio.txt", "w"); if (! file) goto 오류; fputs ( "hello \ n", 파일); fflush (파일); fputs ( "world \ n", 파일); fclose (파일); 파일 = fopen ( "fileio.txt", "r"); if (! file) goto 오류; fgets (buf, sizeof (buf), 파일); / 'hello' / fgets (buf, sizeof (buf), 파일) 건너 뛰기 ; / 'word'를 얻습니다 * / fclose (file); 풋 (buf, stdout); 리턴 0; 오류 : fputs ( "파일을 열 수 없습니다 \ n", stderr); 리턴 1; }
FelipeC

orignal C 포스트의 멋진 코딩 (많은 괜찮은 오류 검사) (길이가 다소 불림).
xagyg

29

쉘 스크립트 (UNIX)

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

실제로 sed -n "2p"부품은 두 번째 줄을 인쇄하지만 질문은 두 번째 줄을 변수에 저장 한 다음 인쇄하도록 요청합니다.


9
나는 왜 그런지 모르겠지만, 나는 이것을 좋아한다 :)
Federico klez Culloca

물론 중요합니다. 좋은 답변과 +1에 기여해 주셔서 감사합니다
Brock Woolf

왜 표준을 / dev / null로 보내지 않습니까?
Gumbo

쉘 내장 만 사용하는 다소 단순하고 빠른 버전이 있습니다 (별도의 프로세스를 호출하는 대신 sed) : 여기 : stackoverflow.com/questions/3538156/…
Brian Campbell

@Gumbo, 그러면 두 번째 줄은 어떻게 얻을까요? 변수 LINE=`foo`의 출력을 캡처합니다 . fooLINE
strager 5

27

Linux의 x86 어셈블러 (NASM)

나는 7 년 동안 asm을 만지지 않았으므로이를 해킹하기 위해 Google을 약간 사용해야했지만 여전히 작동합니다.) 100 % 정확하지는 않지만 알고 있습니다 : D

좋아요, 작동하지 않습니다. 죄송합니다. 이 인쇄 않지만 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

4
재밌는 점은 더 높은 수준의 언어 인 C의 예제가이 언어만큼 길다는 것입니다 ... =)
Jani Hartikainen

1
@ 재니 : 그러나 적어도 이해하기가 더 쉽습니다.
sbi

처음에는 DOS 용이라고 생각했습니다 :)
mlvljr

21

자바 스크립트-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
@Dave, 브라우저에서 찾은 JS가 아닙니다. 문법적으로, 의미 적으로, 그것은 동일한 JS이며 표준 라이브러리 만 다릅니다. 나는 node.js플랫폼 의 stdlib를 사용했다 .
Ionuț G. Stan을

5
이 코드는 계속해서 울고 있습니다. 눈물이 들립니다.
Matt

2
아래층의 라인 수가 ASM 솔루션의 라인 수와 거의 일치하는 것은 재미 있지 않습니까?
kizzx2

1
@Matt 예, 계속 또는 모나드가 여기에서도 도움이 될 것입니다.
Martijn

21

공통 리스프

(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

PowerShell

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

3
이것은 좋고 깨끗합니다. 야 파워 쉘.
Jay Bazuzi

인용에 대한 당신의 논리에 동의합니다. 내가 그들을 제거한 이유는이 스크립트가 실제로 컴팩트하기 때문에 맨 위에 있음을 깨달았 기 때문에 더 작게 원했습니다. 그러나 우리는 분명히했습니다 :). 그리고 gc대신에 사용하는 것이 cat합리적입니다 :-) get-alias나에게 cat먼저 주었다 (나는 PowerShell을 많이 사용하지 않는다).
Lasse Espeholt

4
젠장, 더 짧은 것이 있습니까?
0fnt

18

쉘 스크립트

여기에 오히려 같은 외부 명령을 호출하는 것보다, 단지 내장 명령을 사용하여 쉘 스크립트의 sed또는 tail이전 응답이했던 것처럼.

#!/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. 전화하면sed이 경우와 같이 한 번만 경우 실제로 알 수있는 것보다 더 빨리 실행되므로 별 문제가되지 않지만 수백 또는 수천 번 실행하려는 경우에는 합산

구문에 익숙하지 않은 용 {} 현재 셀 환경에서의 명령 목록을 수행 (달리 (하고 )있는 서브 쉘을 만들고, 나중에 그 변수의 값을 사용할 수 있으므로이 현재 셀 환경에서 동작 할 필요) . fileio.txt; 에서 리디렉션하여 생성 된 동일한 입력 스트림에서 작동하도록하려면 명령을 함께 그룹화해야합니다 . 단순히 실행했다면 read < fileio.txt; read input < fileio.txt파일이 두 명령 사이에서 닫히고 다시 열리기 때문에 첫 번째 줄을 얻습니다. 쉘 구문의 특이성 ( {} 메타 반대로, 예약어), 우리는 분리해야 {하고}공백이있는 나머지 명령에서을 사용하여 명령 목록을 종료하십시오 ;.

그만큼 read내장은 변수의 이름으로 읽을 인수로합니다. 입력 줄을 소비하고 공백으로 입력을 끊습니다 (기술적 $IFS으로는 공백 문자로 기본 설정됩니다. 공백 문자는 공백, 탭 또는 줄 바꿈으로 분할됩니다). 각 단어는 순서대로 주어진 변수 이름에, 나머지 행은 마지막 변수에 할당합니다. 우리는 하나의 변수를 제공하기 때문에 전체 변수를 해당 변수에 넣습니다. $input첫 번째 줄의 내용을 신경 쓰지 않기 때문에 변수를 재사용합니다 (Bash를 사용하는 경우 변수 이름을 제공 할 수는 없지만 이식 가능하려면 항상 하나 이상의 이름을 제공해야합니다).

내가 한 것처럼 한 번에 한 줄씩 읽을 수 있지만 훨씬 일반적인 패턴은 while 루프로 줄 바꿈하는 것입니다.

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

3
아주 좋아요 나는 (일시적으로도) 무언가를 배웠다.
Potatoswatter

기부 해 주셔서 감사합니다. Brian.
Brock Woolf

완전히 아프다! 좋은 방법으로 :-)
helpermethod

18

클로저

(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)))))

또는 스레딩 매크로 ->(Paren remover라고도 함) 사용 :

(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
지난 50 년 동안 WTF 는 Lisp / Scheme rock을 언급 한 사람이 거의 없었습니다!
Ionuț G. Stan

11
잠깐, spit실제로 파일에 쓰기 기능의 이름입니까?
Sam Stokes

4
클로저는 확실히 흔들리지 않습니다!
kirk.burleson

1
@ [Sam Stokes] 코어에는 slurp라는 함수가 있는데, 전체 파일을 문자열로 읽어서 반환합니다. 침은 정반대입니다. 무엇이 문제입니까? line-seq와 같이 다른 방식으로 유사한 작업을 수행하는 다른 기능이 있습니다.
Rayne

4
확실히 @ kirk.burleson Java보다 더 많이 흔들린다. :)
Rayne

17

에프#

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

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

1
에프#. 좋은. 당신의 기여에 감사드립니다.
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

나는 물론 내 머리 꼭대기에서 그것을하지 않았다 : 몇 가지 물건을 찾기 위해 몇 분이 걸렸다.
casablanca

그래 물론. 아직 잘 했어.
Brock Woolf

가장 고전적인 BASIC 버전에서 줄 번호가 필요하지 않습니까 ???
Yuji

@Yuji : "가장 고전적인 버전"에서는 그렇습니다.하지만 90 년대 초반부터 어떤 버전도 필요하지 않다고 생각합니다.
casablanca

16

목표 -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와 같은 언어에서 올 때 매우 외국처럼 보입니다.
파이잘 아비드

5
Objective-C의 비밀은 Xcode가 모든 코드 완성을 수행한다는 것입니다. 긴 메소드 이름을 기억할 필요는 없습니다. 그래도 코드를 훨씬 더 읽기 쉽게 만듭니다
Brock Woolf

7
그리고 나는 C ++ 구문이 이미 최악이라고 생각했습니다.
Toad

6
Objective-C는 Stackoverflow 구문 형광펜이 올바르게 색상이 지정되지 않아 나빠 보입니다.
Brock Woolf

4
나는 이것이 지금까지 목록에 있다는 것을 믿을 수 없다! 또한 Objective-C가 추악하다고 언급하는 Java 사람들은 동일한 파일을 작성하는 데 몇 줄이 걸렸습니까? 예전에는 Java 애호가 였지만 Objective-C가 마음에 들어갔습니다.
Kyle

16

#!/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

6
비 독점적 파일 핸들은 스택 오버 플로우에서 사용해서는 안됩니다. 실제로는 거의 필요하지 않으며 초보자도 자신이 존재한다는 것을 보여서는 안됩니다.
Ether

4
두 개의 인수가 열려있는 경우에도 마찬가지입니다. 스택 오버플로에서 사용해서는 안되며 실제로는 사용하지 않아야합니다.
rpkelly

2
나는 3-arg open 및 lexical 파일 핸들을 너무 많이 사용하여 실제로 볼 때 구문 오류로 간주합니다. 그리고 그렇게해야합니다. / me는 모듈을 작성하는 방법에 대해 숙고합니다.
Kent Fredric

2
"단항 오픈에도 사용이있다", 그것도 사용하고있다. 그러나 나는 그것이 어떻게 작동하는지에 대해 학대를 느꼈다. perl -we 'for (q{ps aux |}){ open _; print <_>; }'
Kent Fredric

15

아르 자형:

cat ( "hello \ n", 파일 = "fileio.txt")
cat ( "world \ n", file = "fileio.txt", append = TRUE)
line2 = readLines ( "fileio.txt", n = 2) [2]
고양이 (line2)

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

잘됐다. 기여해 주셔서 감사합니다.
브록 울프

20
또는 C 구현을 사용하여 달러 기호를 추가 할 수 있습니다.
Kendall Hopkins 5

@strager 나는 모른다. 그것이 선택적인지 모르고 실제로 그것 없이는 더 낫다는 것을 모르는 사람들이 있습니다.
Ionuț G. Stan

6
누군가 궁금한 점이 있다면 닫기 태그를 중단 한 이유는 태그를 포함하고 후행 공백을 남기면 '헤더가 이미 전송되었습니다'라는 오류가 발생할 수 있기 때문입니다.
Bill 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
@ 브록 : 요즘 자바는 느리지 않습니다. 장황하지만 느리지는 않습니다. 그런 말을하지 마십시오. JVM 사람들에게 상처를줍니다. : '|
missingfaktor

9
Java가 느리다고 말한 사람은 맹인 Java 증오이거나 암석 아래 살고 있습니다. Java는 C보다 빠르지는 않지만 플랫폼 독립성으로 부팅 할 수 있습니다.
NullUserException

4
@ 누락 된 Faktor : 그리고?
Jerry Coffin

19
실행 속도는 프로그래머가 가지고있는 가장 지연된 형태의 소변 콘테스트입니다. 작업에 적합한 도구를 선택하고 실행 속도와 같은 임의의 메트릭을 선택하고 중요한 힙을 할당하는 것은 어리석은 일입니다. 특히 실행 속도가 대다수의 작업에서 끔찍하게 중요하지 않기 때문에 특히 그렇습니다. 충분히 빠릅니다 (자바는 거의 모든 것입니다)
Matt Briggs

11
"하드 와이어가 머신 코드보다 빠름", "머신 코드가 asm보다 빠름", "asm이 C보다 빠름", "C가 Java보다 빠름", "blah blah blah"... 얼마나 많은 단서가 있습니까? 간접 코드는 이미 기계 코드와 CPU 사이에 있습니까? C / asm에서 동적 할당으로 인한 비결 정성을 언급하지 않는 마이크로 코드, 예측 최적화 기, 명령 / 데이터 캐시, 디코더 등. 자바와 다른 안전한 언어는 간접적으로 한 걸음 더 나아가는 단계 일 뿐이다. 당신은 당신의 원시적 형태로 영원히 머 무르거나 우리와 함께 진화 할 수 있습니다.
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 ++의 구문이 얼마나 될 수 있는지 잊었습니다.
Toad

이것은 이다 대부분의 C ++ 코드 외모가 좋아에 비해 형편. 주요 문제는 구문이 아닌 표준 라이브러리에 정의 된 적절한 상수가 부족하다는 것입니다. 내가 포함 할 필요가 저를 압도 <limits>단지 얘기 ignore아니다 라인 크기에 대한 제한.
Potatoswatter

8
@ 한스 : 당신은 그것을 명확히하고 싶습니까? 개인적으로 I / O 언어가 아닌 라이브러리에 한다고 생각 하며 프로그래밍하는 모든 언어 (C, C ++, Java, Python 등)는 그렇게합니다.
Chinmay Kanchi

2
이제 Linus가 C ++이 못생긴 이유를 알고 있습니다. (공격 없음)
kizzx2

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, 0666정크 이동의 기본 파일 I / O에 대한도 필요?
Joey Adams

1
아니면 그것은 "정지"이름을 변경해야합니다
xagyg에게

16
30 년 동안의 진화와 언어 디자인을 제공하면서도 C처럼 오류 확인 코드를 작성하기 어려운 새로운 언어를 개발했습니다. Java도 덜 장황합니다!
DK.

5
와우 ... 이동이 예에 너무 많은 실패를 보인다
알레산드로 Stamatto

12

에를 랑

아마도 가장 관용적 인 얼랭은 아니지만 :

#!/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

이맥스 리스프

어떤 사람들의 말에도 불구하고 이맥스는 주로 텍스트 편집기입니다 [1]. 따라서 Emacs Lisp를 사용하여 모든 종류의 문제를 해결할 수 있지만 텍스트 편집기의 요구에 맞게 최적화됩니다. 텍스트 편집기는 파일을 처리하는 방법과 관련하여 상당히 구체적인 요구가 있기 때문에 이것은 Emacs Lisp가 제공하는 파일 관련 기능에 영향을 미칩니다.

기본적으로 이것은 Emacs Lisp가 파일을 스트림으로 열고 부분적으로 읽는 기능을 제공하지 않음을 의미합니다. 마찬가지로 전체 파일을 먼저로드하지 않으면 파일에 추가 할 수 없습니다. 대신 파일이 버퍼 [3]로 완전히 읽혀지고 [2] 편집 된 후 파일에 다시 저장됩니다.

필수 작업에는 Emacs Lisp를 사용하는 것이 적합하며 동일한 기능을 편집하지 않는 작업을 수행하려는 경우 사용할 수 있습니다.

파일에 반복해서 추가하고 싶다면 여기에는 엄청난 오버 헤드가 있지만 여기에 설명 된대로 가능합니다. 실제로 파일에 쓰기 전에 수동 또는 프로그래밍 방식으로 버퍼 변경을 완료합니다 (아래 예에서 처음 두 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는 일반적으로 사용자 입력을 기다릴 때 (및 입력 대기와 동일하지 않은 경우) 화면을 다시 표시하기 때문에 강제로 다시 표시해야합니다. 이것은이 예에서 필요합니다 (두 번째 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

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 (newline) 세계 만 있다고 가정합니다. 따라서 첫 번째 줄은 건너 뛰고 두 번째 줄만 에코합니다.

변경 로그

  • 2-Ops, 요구 사항을 잘못 읽었거나 나에게 변경되었습니다. 이제 파일에서 마지막 줄을 읽습니다.


산뜻한. 당신의 기여에 감사드립니다.
Brock Woolf

생성 된 파일 을 읽는 것으로 4) 단계를 이해 합니다.
devio

@devio-요구 사항이 변경되었거나 잘못 읽었을 것입니다 ... 어쨌든 그러한 솔루션이 존재
하는지 알

11

스칼라 :

표준 라이브러리 사용 :

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)      


많은 사람들이 동일한 파일 디스크립터를 사용하여 두 문자열을 작성했기 때문에 내 대답에 그 방법도 포함시킵니다.

표준 라이브러리 사용 :

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

2
@Radtoo : 추가 작업을 보여주었습니다. 그렇기 때문에 이런 식으로 했어요.
missingfaktor

@Radtoo :이 스레드에서 다른 답변을 본 후에 마침내 내 답변에 그 방법을 포함하기로 결정했습니다. 확인해 봐. (나는 원래 코드를 제거하지 않았습니다.)
missingfaktor

@Missing Faktor, 게으른 것이 getLines().toList()어야 getLines().toSeq합니까?
Elazar Leibovich

@Elazar : 좋은 제안. 감사. :)
missingfaktor

11

그루비

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

기여해 주셔서 감사합니다.
Brock Woolf

3
당신은 "world \ n"부분을 부정하고 있습니다. 추가하지 않고 동일한 파일 설명자에 쓰는 것입니다.
OTZ

원래 게시물의 세 번째 설명은 "첫 줄을 쓴 후 텍스트 파일을 다시 열 필요가 없습니다"라고 말합니다
Wayne Keenan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.