2012-03-02 3 views
1

텍스트 파일을 구문 분석하고 키워드 x = "value"를 찾을 수있는 검색 프로그램을 C 언어로 작성해야합니다. 다음 배열로 값 항목 목록을 만들려합니다. 현재 fscanf 방식을 사용하고 있습니다. 여기에 제 코드가 있습니다.특정 키워드가 일치하는 텍스트 파일을 구문 분석



    fscanf(fp, "%s", buf); 
    if !strcmp(buf, "x") 
    { 
     fscanf(fp, "%s", buf); 
     if (! strcmp(buf, "=")) 
     fscanf(fp, "%s", buf); 
     else 
     printf("\n Not a valid format"); 
    } 

fscanf를 사용하고 싶지 않습니다. 내 요구 사항에 대한 다른 접근 방법이 있습니까 ??
감사합니다.

답변

1

는 다른 방법 (예를 들어, 당신은 플렉스를 사용할 수 있습니다)이 있습니다,하지만 난 sscanf의 약간 더 나은 사용이 가장 나을 생각 :

char buffer[256]; 
char value[128]; 

fgets(buffer, sizeof(buffer), fp); 

if (1==sscanf(buffer, "x=%127s", value)) 
    // we read a value -- now use it however needed. 

편집 : 여기에 기본적인 아이디어는 매우 간단하다. fgets과 같이 전체를 읽는 것으로 시작합니다. 그런 다음 sscanf을 사용하여 x=<whatever>와 (과) 일치하는 라인을 찾으십시오. 우리가 그것을 발견하면, 우리는 우리가 소중히 여기는 가치가 있습니다. 찾지 못하면 sscanf는 변환 한 항목 수를 반환하므로 0을 반환하고 지정된 x=과 일치하지 않으면 아무것도 변환하지 않으므로 sscanf는 0을 반환하고 우리는 그 라인이 일치하지 않는다는 것을 압니다.

편집 2 : 다음은 파일에서 데이터를 읽는 작은 데모 프로그램, 그리고 형태 x=<whatever>에 따라 라인의 값을 출력, 이전과 x 후 허용 공백과 = :

#include <stdio.h> 

int main() { 

    FILE *infile = fopen("Somefile.txt", "r"); 

    char buffer[256]; 
    char value[128]; 

    while (fgets(buffer, sizeof(buffer), infile)) 
     if (1 == sscanf(buffer, " x = %127s", value)) 
      printf("Value = %s\n", value); 
    return 0; 
} 

I 입력으로이 그것을 테스트 :

some junk 
#a comment 
a = 1 ; a couple other variables. 
b = 2 
x = 3 
x = 4 
x=5 

내가 가진 결과였다

Value = 3 
Value = 4 
Value = 5 
+0

답장을 보내 주셔서 감사합니다. 답변을 자세히 설명해 주시겠습니까? – Nimit

+0

좋습니다. 그러나 파일 데이터를 버퍼에 저장하는 것이 좋습니까? 파일 조작으로 위의 예를 제게 제공 해주시겠습니까 ?? 고마워. – Nimit

+1

''x = % 127s "'와 같이 형식 문자열에서'='주위에 공백을 두는 것이 좋습니다. 이렇게하면 사용자는 파일에서'= '주위에 공백을 둘 수 있습니다. –