Извлечение определенных токенов с помощью stringstream - PullRequest
0 голосов
/ 08 сентября 2018

Я извлекаю ровно 14 токенов в каждой строке файла csv, и моя проблема в том, что в любом токене, если в нем есть пробелы, я хочу сохранить его, но я использую stringstream, поэтому при попытке извлечьданные, я исключаю пробелы, кроме одного и того же токена, он вводится неправильно и после этого испортит все данные.Мне нужен способ использовать stringstream, но я все же смогу сохранить пробелы в токенах.Я пытаюсь извлечь именно третий токен (в моем случае), но было бы неплохо узнать, как вообще я могу получить любой токен

Пример: CSV-файл будет:

PHIL, 100, Введение в философию, 6, Бобби, ... (все в одной строке)

У меня есть конструктор, который берет ссылку на объект stringstream, который должен инициализировать мои члены данных.Когда я получаю токен, в котором обычно есть пробелы, он останавливается на пробеле, и в этом примере он принимает только «Intro», а затем сохраняет его в моей переменной classTitle, но мне нужен весь «Intro to Philosophy».У меня также есть поле для имени учителя, но в имени человека почти нет пробелов.Но в целом, как мне сохранить интервал?

Это мой конструктор:

Course( stringstream &ss ){


    ss >> dept >> courseNumber >> courseTitle >> numAs >> numBs >> numCs >> numDs >> numFs >> numIs >> numNRs
    >> numSs  >> numUs >> numWs >> instructor;

    dump();         
}

В основном, когда я читаю файл, дамп - это просто функция, которую я использую длявыведите данные, которые я получу, чтобы убедиться, что это правильно:

string dummyLine; // string meant to be used to skip over first line
    getline(gradeFile, dummyLine);
    while ( gradeFile.good() ){ // read until the end of the file

        stringstream ss;
        getline(gradeFile, input); // r)ead a line of input, stop at a comma
        replace(input.begin(), input.end() , ',', ' ');

        ss << input;
        Course course(ss);


        if ( count == 0 ){
            //course.dump();
        }

        count++;

        break;
    }

Но на самом деле в моих выходных данных я получаю кучу 0 после 'Intro' в моих реальных данных, даже если числа в файле csvне равны 0, так что это также озадачивает меня, потому что я думал, что каждый токен после этого получит значение, которое получил бы токен, который я хотел бы ввести, если это не потому, что другие поля до 13 были целыми.

1 Ответ

0 голосов
/ 08 сентября 2018

Потоки не совсем подходят для того, что вы пытаетесь решить. Хотя это возможно несколькими различными способами, вам придется пройти через много хлопот, чтобы заставить его работать. Вместо этого гораздо проще просто прочитать всю строку / что угодно, а затем токенизировать строку - здесь я думаю, что использование регулярного выражения имеет смысл.

...