본문 바로가기

컴퓨터 과학 & 영상처리 관련/C / C++

fscanf 대신 strtok으로 문자열 나누기, C++ tokenizer

fscanf는 %s시 0같은 공백이 나올때까지 읽는다 함...

->머 암튼 여기저기 검색하면 나오긴 하는데 쨌든 

아래와 같이 fscanf로 할라고 쳤을 때 문자열 좆같이 읽어짐

유니코드, ANSI 파일 등 인코딩에 따라서 한글 읽을 때 좆같기도 하고

%s, %s, %s, %s, %s

%s\t%s\t%s\t 


근데 strtok으로 아래와 같이 하면 쉬움

http://cboard.cprogramming.com/c-programming/15395-parsing-tokens-strtok.html


+-----------------------------------

char batchLine[1000];

char batchTime[1000];


FILE* fp = fopen(filename, "rt");   //파일열고

char string[1000], seps[] = "\n,\t";   //이걸로 구분하고

char *p;


int tokenIndex= 0;


while(fgets( string, sizeof(string)-1,fp) != NULL)   //한줄씩 읽어서 1000사이즈 char 배열에 넣고

{

/* Break into tokens. */

p = string;

p = strtok( string, seps ); /* Find first token*/    


//한줄을 토큰으로 나누고 그 한줄에 대해서 계속 조지는 것임. 

//따라서 "나이    이름    성별    전화번호    주소    " 이런식으로 되어 있을 때 index에 따라 데이터를 다른 곳에 받아서 

//입력받아 사용할 수 있겠지...fscanf가 잘 되었으면 좋았는데...

while( p != NULL )   

{

switch(tokenIndex)

{

case 0:

strcpy(batchTime, p);

break;

default:

break;

}

p = strtok( NULL, seps ); /* Find next token*/

tokenIndex++;

}

tokenIndex = 0;


/////////////////////////////////////////

}

fclose(fp);



-+------------------------------

또는 Boost 라이브러리 C++ 토큰, tokenizer


http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c

http://www.boost.org/doc/libs/1_36_0/libs/tokenizer/index.html

-> http://imssosso.tistory.com/16 

부스트 설치...좆빠지네..이건 시간 없다

->http://warmz.tistory.com/903 이건 좀 쉽네

->10.0으로다가 함


compiler include paths : C:/boost/boost_1_58_0

linker library paths : C:/boost/boost_1_58_0/stage/lib

->일단..이건 뒤로 좀...시간도 많이 걸리고 라이브러리 추가하기도 귀찮고...

사용 방법도 그렇고..근데 확실히 C, C++이 C#보다 불편하기는 하다

파일에서 readline으로 한줄 읽기도 그렇고, 토큰 나누는것도 그렇고



------------------------------------------------