300x250
반응형

간단하게 파일에 내용을 가져와서 사용을 해야 할 일이 있어서 테스트겸 만들어 보았다.

C++을 잘 사용 할 줄몰라서 C/C++를 혼용하여 사용 하였으면 최종 데이터 저장 컨테이너는

map으로 사용 하였고, 멀티맵을 하지 않은 이유는 겹치는 key는 발생 할 일이 없을 것으로 판단 하였다.

 

테스트 파일 원본.
//YAS.
DEMO 3

//Tuen.
TONVOLUME 22

//Max T
MAXVOLUME 45

//Reset Timer
RESETTIMER 0

//KEY PATEERN
KEY 2

//USBPLAY
//USBREPEAT ALL
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cstring>
#include <map>
#include <vector>

using namespace std;

typedef struct {
    string key;
    string value;
}USB_DATA;

map<string, string> mapData;

int TrimRight(char *p)
{
    int len = strlen(p);

    if(len <= 0)
    {
        p[0] = 0;
        return 0;
    }
    else
    {
        len--;
        while(len)
        {
            if((unsigned char)p[len] > ' ') break;

            p[len] = 0;
            len--;
        }
    }

    return strlen(p);
}

bool parsingData(char* str)
{
    int cnt = 1;
    char *tok = NULL;

    USB_DATA t_data;

    if(str != NULL)
    {
        if(str[0] == '/' && str[1] == '/')
        {
            return false;
        }
        TrimRight(str);

        tok = strtok(str, " ");
        if(tok == NULL)
        {
            return false;
        }

        t_data.key = tok;

        tok = strtok(NULL, " ");
        if(tok == NULL)
        {
            return false;
        }

        t_data.value = tok;
    }

    //printf("struct data[%s][%s]\n",t_data.key.c_str(), t_data.value.c_str());

    mapData.insert(make_pair(t_data.key, t_data.value));

    return true;
}

bool getDataFile()
{
    FILE    *fp = fopen("demo_mode3.txt","r");
    int     len = 0, total = 0;
    char    buff[64] = {0,};

    if(fp == NULL)
    {
        printf("file open fail\n");
        return false;
    }

    char *p;
    while(!feof(fp))
    {
        p = fgets(buff, sizeof(buff), fp);
        if(p != NULL)
            parsingData(p);
    }

    fclose(fp);

    return true;
}

void print_map()
{
    for(auto itr = mapData.begin(); itr != mapData.end(); ++itr)
    {
        cout << "key : " << itr->first << ", " << "value : " << itr->second << endl;
    }
}

int main(void)
{
    printf("Program parsing\n");

    getDataFile();

    print_map();

    return 1;
}

 

결과 값. 

 

위의 결과에서 주석은 제거, 빈공간 제거등을 하여서 데이터만 가져오도록 하였고,

데이터 구분은. ' '(스페이스)로 처리 되어있다.

728x90

+ Recent posts