Rezame Ответов: 2

Запись в csv-файл на языке C++


Привет,
У меня есть некоторые данные в файле csv/txt в следующем формате:
7/11/2012 6:45,7/12/2012 6:45,1.0139,1.0123,1.0067,1.0236,1.0253,1.0289,
7/11/2012 6:45,7/12/2012 6:45,96.95,97.08,96.86,0,0,0,
7/11/2012 6:45,7/12/2012 6:45,1.5507,1.5487,1.5441,1.5623,1.5639,1.5691,

Я пытаюсь разобрать эти строки и записать в другой csv-файл. CSV должен включать в себя различные строки и столбцы.
Мой код таков:

void readInput(char* fileName) {
    printf("****************ReadInput***************\n");

    // read file
    ifstream fin(fileName);
    string tmp = ""; // a line in the input file
    while(getline(fin, tmp)) {
        // add string into vector
        listString.push_back(tmp);
        cout << listString[listString.size() - 1] << endl;
    }
    printf("\n\n");
    fin.close();
}

/*
 * parseValues is to extract data in the input file
 */
void parseValues() {
    printf("****************ParseValue***************\n");
    for (int i = 0; i < listString.size(); ++i) {
        char tmp[100000];
		
        strcpy(tmp, listString[i].c_str()); // copy string to char array
        stringArray tmpArray;
        // utilize string token to extract data
        char * pch;
        pch = strtok (tmp,",");
        while (pch != NULL) {
            tmpArray.push_back(pch);
           printf ("%s\t",pch); 
            // get the next token
            pch = strtok (NULL, ",");
			
        }
        data.push_back(tmpArray);
		
        printf("\n");
    }
}

/*
 * parseValues is to write data at the beginning of file
 */
void writeOutput01(char* fileName) {
    ofstream fout(fileName);
    // for each row
    for (int i = 0; i < listString.size(); ++i) {
        // for each column
        for (int j = 0; j < data[i].size(); ++j)
            fout << data[i][j] << ',';
        fout << "\n";
    }
    fout.close();
}


Когда он разбирает и пишет, пишет в 3 строки и один столбец.
Он пишет в одном столбце вместо 8 столбцов для каждой строки.
Как это исправить?
С уважением,

2 Ответов

Рейтинг:
0

Sergey Alexandrovich Kryukov

Вы думаете, что "\n" - это символ конца строки, но это не совсем так. К сожалению, это зависит от вашей платформы. Пожалуйста смотрите:
http://en.wikipedia.org/wiki/End_of_line[^].

Вам нужно написать конец строки определенным образом для вашей платформы или сделать его кросс-платформенным. Пожалуйста смотрите:
http://stackoverflow.com/questions/8689344/portable-end-of-line-newline-in-c[^].

—СА


Рейтинг:
0

Member 13684159

int n=1, k=2,l=9;

потока вывода,;

о'.открытые("тест.КШМ", с iOS::приложения) ;
o<<n<","<< l<","<< k; / / делая это так, вы помещаете его в разные столбцы