2013-04-05 2 views
1

구분을하지만 서로 다른 스타일로 읽는 파일에 대한 기능 제작 :C++와 같은 txt 파일 파일에서 한 줄을 읽어 나는 파서를 만들고 싶어

INDORE|NJ|201568|A| 
UJJAIN|AB|3458|B| 

한 줄을 읽어 그 어떤 붙박이 기능입니다 한 번에 ... 형식 지정자를 통해 해당 변수의 값을 캐치합니다. 그러나 별개의 값은 |구분 기호입니다.

parser(str,'|',"%S|%S|%S|%S",location,name,phno,tok); 

location

, name, ... 등은 변수입니다.

matlab "strread"의 기능을 찾았습니다.이 유형의 작업을 수행합니다.

답변

0

모든 변수가 문자열로 표시되기 때문에 str을 스트림이라고 가정하면 std::getline'|'을 구분 기호로 간단하게 사용할 수 있습니다.

std::getline(str, location, '|'); 
std::getline(str, name, '|'); 
std::getline(str, phno, '|'); 
std::getline(str, tok, '|'); 

읽을 수도있는 모든 매개 변수를 취하는 가변적 인 템플릿 함수로이를 래핑 할 수도 있습니다.

void readParams(std::istream& stream, char delim) 
{ 
} 

template<typename ... Tail> 
void readParams(std::istream& stream, char delim, std::string& string, Tail& ... t) 
{ 
    std::getline(stream, string, delim); 
    readParams(stream, delim, t ...); 
} 

이 기능은 다음과 같은 호출 할 수 있습니다 : 당신은 가변 인자 템플릿없이 컴파일러를 사용하여 제한하는 경우

readParams(str, '|', location, name, phno, tok); 

, 당신은 여전히 ​​당신이 원하는 인수의 수에 대한 몇 가지 오버로드를 추가 할 수 있습니다 , 나중에 그들을 진정한 variadic 템플릿으로 대체하십시오.

+0

7 초 그것을 패배 ... : P 내가 때로는 토큰 공백, 쉼표, 같은 토큰을 취 내 모든 다른 파일에 대한 함수를 만들고 싶어 – maditya

+0

,. 나는 이미 내 파일 구문 분석을 위해 getline 함수를 사용했지만 이제는 하나의 함수로 바인드해야한다. – rashi

+0

@rashi 다가오고 있습니다 – Agentlien

0

좀 더 편안해도 될까요? 입력 파일은 | b | c |

#include <stdio.h> 

int main() 
{ 
    char str1 [80] = {0}; 
    char str2 [80] = {0}; 
    char str3 [80] = {0}; 
    FILE * pFile; 

    pFile = fopen ("a.txt","r"); 
    fscanf(pFile, "%[^|]|%[^|]|%[^|]|", str1, str2, str3); 
    fclose (pFile); 
    return 0; 
} 

편집 :


입력 파일이 있습니다 .. 느낌표 파이프에 대한 오해 않은 | B | 2 |

char str1 [80] = {0}; 
    char str2 [80] = {0}; 
    int i; 
    fscanf(pFile, "%[^|]|%[^|]|%d|", str1, str2, &i); 
+0

인 경우 내 변수가 모두 다른 종류 인 경우 interger와 다른 char 등 – rashi

관련 문제