2014-01-15 3 views
0

에 선으로 텍스트 파일 행을 처리 :읽기와 내가 같이 보입니다 텍스트 파일이 C

1;Einstein;Albert;3914-1948-4 
2;Newton;Isaac;1941-5525-2 
... 

typedef struct { 
int Nr; 
char FName[30]; 
char LName[30]; 
char ID[12]; 
} student; 

같은 구조체를 나는 걸리는 기능이 위의 파일과 구조체에서 한 줄짜리 구조로 된 문자열과 구조체의 줄에있는 데이터를 저장합니다.

이제 파일에서 한 줄을 읽고 함수로 처리 한 후 다음 줄로 가야합니다.

줄마다 점프하고 각 줄마다 새로운 변수 유형 학생을 만드는 루프에서이 작업을 수행합니다.

하지만 그 방법을 모릅니다. fgets는 단지 한 줄에서 읽을 수있게하고 다음 줄로 건너 뛰는 방법은 보이지 않습니다.

이렇게 복잡하지 않은 방법이 있습니까?

+1

각 전화는 fgets'에()'반환 _one_ 라인. 다음 행을 읽으려면'fgets()'를 다시 호출하십시오. – chux

답변

1

fgets을 호출 할 때마다 EOF (예 : '파일 끝')까지 새 줄이 반환됩니다.

참조 : fgets를 사용하여 읽기 루프의 맨 개요 예를 들어 fgets

은 다음을 참조하십시오

fgets - get a string from a stream

을하지만, 당신이 충분히 버퍼를 할당 확신 할 수없는 경우 한 번에 한 글자 씩 읽어들이려면 fgetc을 사용하는 것이 더 좋습니다. 파일 I/O가 여전히 버퍼링되고 한 번에 문자를 읽지 않고 걱정할 필요가 없습니다. 텍스트를 다음과 같이 토큰으로 조합하십시오. 너는 무엇보다 긴 줄을 다루는 것보다 오히려 나아 간다. 당신은 하나의 채워진 버퍼와 다음 버퍼 사이에서 분리 된 토큰을 처리하도록 요구할 수 있습니다.

+0

하지만 "EOF 나 개행 후에 읽기가 중단됩니다. 개행을 읽으면 버퍼에 저장되고, 마지막 null 바이트 (aq \ 0aq)는 버퍼의 마지막 문자 다음에 저장됩니다." 그래서 첫 번째 줄 이후에 읽는 것을 멈출 것입니다. – user3004619

+0

글쎄, EOF는 문제 없습니다. 끝났습니다. 그러나 개행 문자의 경우, 다음에'fgets'를 호출하면 개행 문자 다음의 문자, 즉 다음 행을 읽을 수 있습니다. – Ned

+1

@ user3004619 한 통화에 대한 것입니다. 다시 전화하면 EOF까지 다른 회선을 얻습니다. – pinkpanther

1

당신은 다음과 같이 수행 할 수 있습니다

str char *str; 
    str = fgets(fptr); 
    while (str != EOF) 
    { 
     printf ("%s", str); 
     str = fgets(fptr); 
    } 
관련 문제