Computer/Algorithm
C++ 길이가 다른 라인 스트링 분할 Strtok 예제
Minwook Chang
2016. 11. 16. 17:43
C++ fread file buffer Strtok 예제
길이가 다른 Line 파일 읽기
예를 들어 다음과 같이 파일이 구성되어 있다고 해보자.
tst.txt
a<tab>bb<tab>ccc<tab>dddd bc bbb<tab>bdfbd<tab>d ... |
- 각 Line에는 길이가 다른 String이 <tab>('\t')로 구분되어 있다.
- 각 Line의 String의 개수가 다르다.(없을 수도 있다.)
라인마다 String의 갯수만 다르더라도 조금은 수월했을텐데 String 다루기에 미숙한 사람은 막막할 수 있다. Strtok을 쓸 때
buff2 = strtok(buff,"\n");
buff3 = strtok(buff2,'\t');
위와 같이 chain rule마냥 연결지어 설정해주지 않으면 프로그램이 제대로 동작되지 않는다. 아래와 같이 처리하면 된다.
buff : 전체 스트링
buff2 : string for line
buff3 : string for tab
buff2 = strtok(buff, "\n");
unsigned int cnt = 0;
int linenum = 0;
while (buff2) {
int i = 0;
int j = 0;
for (; buff2[i] != '\0'; i++) {
buff3[j] = buff2[i];
if (buff3[j] == '\t') {
buff3[j] = '\0';
//처리
j = 0;
}
else {
j++;
}
}
if (j != 0) {
buff3[j] = '\0';
}
buff2 = strtok(NULL, "\n");
linenum++;
}