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

in #kr-dev5 years ago (edited)

[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 <stdio.h>

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 <stdio.h>
#include <string.h>


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

Sort:  

짱짱맨 호출에 응답하였습니다.

짱짱맨 방문 감사해요.

Congratulations @codingman! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published more than 400 posts. Your next target is to reach 450 posts.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do not miss the last post from @steemitboard:

Carnival Challenge - Here are the winners
Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.027
BTC 60654.57
ETH 2343.25
USDT 1.00
SBD 2.48