2009-12-15 3 views
4

나는 다음과 같은 C# 코드 스 니펫을 가지고있다.텍스트 파일을 줄 단위로 배열로 읽어 들이고 인쇄하기

    string[] lines = File.ReadAllLines(@"C:\test.txt"); 
       for(int i=0; i<lines.Length; i++) 
        Console.WriteLine(lines[i]); 

내가 C로 변환하도록 도울 수 있는가?

고마워!

+4

정보를 위해 "line by line"을 읽지는 않습니다 - 모든 것을 한 번에 읽습니다 ...하지만 그 점 옆에 있습니다 ... –

+0

아마 도움이 될 수있는 것을 보여 주어야합니다 . –

+0

내 프로그램이 C#에서 완벽하게 작동하고 있고 C 언어에 익숙하지 않은가? 내가하고있는 일은 3 백만 개의 파일로 구성된 ascii 파일을 얻는 것이다. 모든 파일은 공간으로 구분 된 세 개의 부동 소수점으로 구성되어있다. 대략 동일한 크기의 다른 파일. 그들은 외부 및 내부 루프에서 실행되므로 총 3million * 3million, ... – asel

답변

0
프로세스가 거의 예상대로 작동합니다

:

파일을 엽니 다 짐작 인코딩으로 입력을 읽어 (당신이 ReadAllLines는 않습니다), 대상 포맷으로 코딩 인코딩을 파악 - 이는 아마도 것 UTF16이어야하며 표준 출력으로 출력하십시오 ...

1

fopenfgets 기능을보십시오.

fgets은 특히 개행 문자에 도달 할 때까지 읽히므로 한 번에 한 줄씩 텍스트 파일을 읽는 데 적합합니다.

0

한 가지 스트림에서 다른 스트림으로 데이터를 복사하는 경우 줄 단위로 처리하는 것에 대해 걱정할 필요가 없습니다. 줄 바꿈 문자 (또는 캐리지 리턴 및/또는 캐리지 리턴/줄 바꿈 조합)을 데이터에 저장합니다.

데이터를 변경하지 않고 그대로 복사하면 선이 보존됩니다. 속도를 극대화하려면 파일을 바이너리 모드로 열고 fread/fwrite를 사용하여 한 번에 상당히 큰 청크 (예 : 4MB)를 복사하십시오.

+0

나는 내 프로그램이 C#에서 완벽하게 작동하고 있으며, 나는 C에서 매우 익숙하다.내가하고있는 일은 3 백만 개의 파일로 구성된 ascii 파일을 얻는 것입니다. 모든 파일은 공간으로 구분 된 세 개의 부동 소수점으로 구성됩니다 ... 그리고 나는 대략 같은 크기의 다른 파일을 가지고 있습니다. 그들은 외부 및 내부 루프에서 실행되므로 총 3 백만 개 * 3 백만 개입니다. ... – asel

+0

@asel : 그 교차 제품으로 무엇을하고 있습니까? –

0

당신은 C++로 간단하게 할 수 있습니다. 사용 fgets

ifstream input("test.in"); 
string line; 
while(getline(input, line)) { 
    //Your code for the current line 
} 
+0

실수가있는 것 같습니다. 'string line'을 선언했지만'getline (input, s)'을 호출하십시오. 아마도's == line'입니까? –

+0

예. 나는 그것을 고쳤다. 감사. – sevity

0

까다로운 에지 경우 초대 :

  • 어떤 라인의 길이는 고정 폭 버퍼의 사이즈보다 큰 경우?
  • 파일이 개행 문자로 끝나지 않으면 어떻게해야합니까?
  • 파일 끝 (end-of-file) 상태를 설정하지 않고 마지막 줄이 버퍼에 정확히 들어가면 어떻게됩니까?

내 블로그에 나는 example of how to do it robustly with fgets을 게시했습니다.

관련 문제