Я хочу скопировать всю строку текстового файла в вектор строк, но содержимое не копируется полностью - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь скопировать строку файла в вектор строк, но не получаю желаемого результата. Вот код:

AmtCatania bus;
ifstream aprifile;
string buffer;
string partenza;
string destinazione;
string data;
string ora_partenza;
string ora_arrivo;
string ritardo;
string tratta;
vector <string> corsa;
aprifile.open("corse.txt");
if(!aprifile.is_open())
{
    cerr << "Registro non aperto!" << endl;
    return -1;
}

while(getline(aprifile, buffer , '\n'))
{

    corsa.push_back(buffer);
    aprifile >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo;
    bus.addTratta(tratta);
    bus.addPartenza(partenza);
    bus.addDest(destinazione);
    bus.addData(data);
    bus.addOraPart(ora_partenza);
    bus.addOraArr(ora_arrivo);
    bus.addRit(ritardo);
}

for (string s: corsa){
    cout << s << endl;
} 

Этот код предназначен для класса Bus Corporation.

Это текстовый файл

5   //number of corsa
534 Scuole Borsellino 10/10 16:00 17:00 0
534 Scuole Borsellino 16/10 18:00 19:00 5
534 Scuole Borsellino 16/10 19:00 20:00 3
722 Borsellino Dusmet 19/10 13:30 14:25 10
722 Borsellino Dusmet 19/10 14:30 15:25 10

Я готов чтобы скопировать каждую строку в вектор строк, но я думаю, пробелы убивают процесс.

//// ОБНОВЛЕНИЕ /////

while(getline(aprifile, buffer , '\n'))
{
  corsa.push_back(buffer);
}
for(string s : corsa)
{
  s >> tratta >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo;
}

the

s >> tratta >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo;

выдает ошибку, как мне теперь разобрать контент?

1 Ответ

1 голос
/ 06 мая 2020

На самом деле вы вообще не разбираете строки.

Ваш l oop считывает строку из aprifile в buffer, а затем подталкивает buffer как есть в corsa, затем считывает еще 6 значений с разделителями-пробелами из следующей строки aprifile и помещает их в bus, который затем игнорируется.

Другими словами, ваш l oop читает слишком много на каждой итерации. Ваше чтение и хранение данных вообще не соответствует формату файла.

Попробуйте вместо этого что-нибудь вроде этого:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

...

ifstream aprifile;
string buffer;
vector<AmtCatania> corsa;
int num_corsa;

aprifile.open("corse.txt");
if (!aprifile.is_open())
{
    cerr << "Registro non aperto!" << endl;
    return -1;
}

getline(aprifile, buffer);
istringstream(buffer) >> num_corsa;

for(int i = 0; (i < num_corsa) && getline(aprifile, buffer); ++i)
{
    string partenza;
    string destinazione;
    string data;
    string ora_partenza;
    string ora_arrivo;
    string ritardo;
    string tratta;

    istringstream(buffer) >> partenza >> destinazione >> data >> ora_partenza >> ora_arrivo >> ritardo >> tratta;

    AmtCatania bus;
    bus.addPartenza(partenza);
    bus.addDest(destinazione);
    bus.addData(data);
    bus.addOraPart(ora_partenza);
    bus.addOraArr(ora_arrivo);
    bus.addRit(ritardo);
    bus.addTratta(tratta);

    corsa.push_back(bus);
}

for (AmtCatania &bus: corsa){
    // print bus as needed...
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...