Я успешно использовал следующий код в C ++ на Windows (через CodeBlocks) и недавно пытался использовать этот код на Linux (Ubuntu 18.04) также через CodeBlocks. Кажется, что код хорошо компилируется, но не выполняется при выполнении.
Цель кода - импортировать текстовый файл с разделителями-запятыми в массив.
В Windows и Linux я использую компилятор GNU G CC.
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
#include <iomanip>
#include <ctime>
#include <cstdio>
#include <stdlib.h>
using namespace std;
typedef vector <double> record_t;
typedef vector <record_t> data_t;
istream& operator >> ( istream& ins, record_t& record)
{
record.clear();
string line;
getline( ins, line );
stringstream ss( line );
string field;
while (getline( ss, field, ',' ))
{
stringstream fs( field );
double f = 0.0;
fs >> f;
record.push_back( f );
}
return ins;
}
//-----------------------------------------------------------------------------
istream& operator >> ( istream& ins, data_t& data )
{
data.clear();
record_t record;
while (ins >> record)
{
data.push_back( record );
}
return ins;
}
//-----------------------------------------------------------------------------
int main()
{
data_t data;
ifstream infile( "Import File.txt" );
infile >> data;
if (!infile.eof())
{
cout << "Unsuccessful Import!\n";
return 1;
}
infile.close();
cout << "Your file contains " << data.size()-1 << " records.\n";
return 0;
}
Я проверил наличие необходимых заголовочных файлов в Linux и похоже, это так.
Если я закомментирую EOF, проверьте, что консоль возвращает сообщение
Process returned 49 (0x31)
Фрагмент файла импорта, который завершается с ошибкой в Linux: 1013 *
1138,1139,1137.25,1138.5
1138.25,1138.75,1138.25,1138.5
1138.75,1139,1138.5,1138.75
1138.75,1138.75,1138.25,1138.25
1138.25,1138.25,1137.5,1137.5
1137.5,1138.75,1137.5,1138.5
1138.75,1143.75,1138.75,1143
1143.25,1145.75,1143.25,1144.5
1144.5,1144.75,1143,1143.25
1143.5,1144.5,1143.25,1144.25
Благодарен за любую помощь в поиске решения.