[C언어] CSV 데이터 파일을 strtok()함수로 처리

Words
246
Reading
2 min
8y
Listen to this post
~2 min

[C언어] CSV 데이터 파일을 strtok()함수로 처리


오늘은 지난 시간에 strtok()함수로 문자열을 쪼개고 그 쪼갠 문자열을 숫자로 변환하여 숫자의 합을 구해 보았습니다. 실제 CSV 파일을 읽어와서 지난 시간의 했던 숫자의 합을 구현해 보는 것이 공부에 도움이 될 것 같다는 생각에 그냥 넘어 가려다가 post로 작성해 봅니다.

1. 파일 읽기


FILE *pFile = NULL;
pFile = fopen("test.csv", "r" ); //파일 열기
fclose( pFile ); //파일 닫기

파일을 읽기 위해서 위와 같은 코딩을 합니다. 딱 세줄이면 파일을 열고 닫을 수 있습니다. pFile에는 읽어 온 파일의 정보가 저장되어 있겠죠. 이 pFile에 저장된 정보를 어떻게 읽은 것인지만 정해서 읽으면 됩니다.

실험에서는 라인으로 읽고 읽는 글자의 범위는 대충 적당한 크기를 정해서 읽을 예정입니다.

그러면 CSV 파일이 정상적으로 읽어오는지 확인해 봅시다.

[test.csv]

10,20,30
40,50,60
70,80,90

[코딩]

#include 

int main(int argc, char *argv[]) {
    
    char str_tmp[1024];
    FILE *pFile = NULL;

    pFile = fopen("test.csv", "r" );
    if( pFile != NULL )
    {   
        while( !feof( pFile ) ){
            fgets( str_tmp, 1024, pFile );          
            printf( "%s", str_tmp );            
        }       
    }
    fclose( pFile );
    
    return 0;
}

fgets()함수로 해서 라인으로 읽어오는데 pFile의 정보에서 최대 1024데이터 크기로 읽어옵니다. str_tmp에는 읽어온 데이터가 저장되게 됩니다. 참고로 반환값은 따로 변수를 선언하면 해당 읽어온 값을 반환값으로 받을 수 있습니다.

p =     fgets( str_tmp, 1024, pFile );          

이렇게 하면 읽어온 라인값은 p에 저장됩니다. 사용방법은 코딩하는 분들의 스타일에 맞게 코딩하시면 됩니다.

[결과]
a1.jpg

2. CSV 데이터 파일 합 구하기



지난 시간 post에 코딩한 소스를 오늘 파일읽기에 그대로 대입하여 실행을 시켜보겠습니다. 외부함수로 해서 별도록 보기 좋게 하려다가 그냥 main()함수 안에다 다 집어 넣었네요.

[코딩]

#include 
#include 


int main(int argc, char *argv[]) {
    
    char str_tmp[1024];
    char *p;
    int b[3] = {0,0,0};
    int cnt, sum, i;
    
    FILE *pFile = NULL;

    pFile = fopen("test.csv", "r" );
    if( pFile != NULL )
    {   
        while( !feof( pFile ) ){
            fgets( str_tmp, 1024, pFile );          
            //printf( "%s", str_tmp );
            
            cnt=0;
            sum=0;
            p = strtok(str_tmp, ",");
            while(p != NULL){
                b[cnt]=atoi(p);
                cnt++;
                p=strtok(NULL, ",");
           }
           for(i=0;i<cnt;i++){
              sum+=b[i];
              printf("%d ",b[i]);
           }    
           printf("토큰수 : %d , 합 : %d\n", cnt, sum);                 
      }     
    }
    fclose( pFile );
    
    return 0;
}

[결과]
a3.jpg

정상적으로 CSV 파일을 읽어와서 각 데이터를 쪼개고 그 데이터를 원하는 계산을 수행 해 보았습니다.

마무리


strtok()함수의 원리를 생각하니 파일을 읽고 읽은 정보를 쪼개서 원하는 형태로 변환 시켜보고 싶은 생각이 문득 들어서 이렇게 실험을 해보았네요. 어떤 하나를 배우게 되면 그 원리를 잘 생각해보고 그 원리를 어디에 적용해 볼지 상상의 나래를 펼치면 이렇게 재밌는 실험을 할 수 있습니다.


Sponsored ( Powered by dclick )

dclick-imagead

[C언어] CSV 데이터 파일을 strtok()함수로 처리 | Ecency