C 예제 - CSV 파일 읽기프로그래밍 노트/C&C++2021. 7. 4. 18:00
Table of Contents
반응형
CSV 파일을 줄단위로 읽어서 공백을 제거한 후, 컬럼 별로 나누어서 출력하는 예제입니다.
다음 3곳의 코드 참고하여 작성했습니다.
https://stackoverflow.com/questions/12911299/read-csv-file-in-c
https://stackoverflow.com/questions/1726302/removing-spaces-from-a-string-in-c
https://www.ibm.com/docs/ko/i/7.3?topic=functions-strtok-tokenize-string
2021. 7. 3 최초작성
2021. 7. 4 컬럼 2개까지만 되는 버그 수정, 구조체로 결과 받아오도록 수정
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DATA 3
struct data{
char s[MAX_DATA][1024];
};
void remove_spaces(char* s) {
const char* d = s;
do {
while (*d == ' ') {
++d;
}
} while (*s++ = *d++);
}
void getfield(char* line, struct data *d, int end_idx)
{
int idx = 0;
char *token = strtok(line, ",");
do
{
//printf("token: %s\n", token);
strcpy(d->s[idx++], token);
}
while ( idx != end_idx && (token = strtok(NULL, ",")));
}
int main()
{
FILE* stream = fopen("location.csv", "r");
char line[1024];
while (fgets(line, 1024, stream))
{
remove_spaces(line);
struct data d;
char *tmp = strdup(line);
getfield(tmp, &d, MAX_DATA);
printf("[%s] [%s] [%s]\n", d.s[0], d.s[1], d.s[2]);
free(tmp);
}
}
실행 결과
[1] [37.40281] [126.97267] [2] [37.40276] [126.97257] [3] [37.40271] [126.97247] [4] [37.40267] [126.97237] [5] [37.40262] [126.97228] [6] [37.40262] [126.97214] |
반응형
'프로그래밍 노트 > C&C++' 카테고리의 다른 글
C++ 예제 - set을 사용하여 vector 중복 확인하기 (0) | 2021.09.22 |
---|---|
C++ set 예제 - 중복 원소 검사 (0) | 2021.09.22 |
C++ 배열(array)과 벡터(vector) 속도 비교 (0) | 2021.03.27 |
C++ shared_ptr 객체를 전달받은 함수에서 사용 후 해제하는 방법 (0) | 2021.02.15 |
Visual Studio 2019용으로 libiconv 빌드하기 및 utf8 <-> cp949 변환 예제 (2) | 2021.02.09 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!