Чтение входного пробела, отделенного от файла

Мне нужно работать над программой на С++, которая должна читать данные из файла .txt, где данные находятся в этой форме

ДАТА ВРЕМЯ ДАТАВРЕМЯ (значение Unix time_T) MachineID Temperature
теперь должны принимать значение time_T и температуру, и мне нужно выполнить сортировку по основанию счисления в этом файле, имеющем более 3 00 000 записей, каждая строка с 1 записью сохранена как изложенное выше, у меня есть представление о сортировке по основанию, но я совершенно не знаю о разделении вышеуказанного строкового формата в отдельной очереди (time_T, Temp). Я читаю файл, используя следующий код:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

int main() {
    ifstream input("demo.txt");
    string line;    
    while (getline(input, line)) {
        cout << line << '\n';
    }
    return 0;    
}

ОБНОВЛЕНИЕ Пример ввода 2016-01-01 00:00:04.039251 1451624404 01948 4.9


person Ravi Mehta    schedule 26.06.2016    source источник
comment
Пожалуйста, найдите свои дубликаты, выполнив поиск в Интернете для разделения пространства чтения stackoverflow c++. См. также связанный c++ файл чтения stackoverflow c++ csv, где csv означает значения, разделенные запятыми.   -  person Thomas Matthews    schedule 26.06.2016
comment
Спрашивая, как анализировать входные файлы, покажите примеры входного формата (и, если необходимо, схему).   -  person Thomas Matthews    schedule 26.06.2016
comment
Возможный дубликат: stackoverflow.com/questions/2530738/   -  person Thomas Matthews    schedule 26.06.2016
comment
Возможный дубликат: stackoverflow .com/questions/18121602/   -  person Thomas Matthews    schedule 26.06.2016
comment
@ThomasMatthews Схема ввода, которую я определил жирным шрифтом   -  person Ravi Mehta    schedule 27.06.2016
comment
@RaviMehta Как уже упоминал @LogicStuff, istringstream отлично сработает. См. этот ответ: stackoverflow.com/a/7868998/2951830   -  person DearVolt    schedule 27.10.2017


Ответы (2)


Нет необходимости использовать inFile дважды в итерации. Я думаю, это должно помочь:

int main() {
    ifstream inFile("filename.txt");
    int i = 0;

string date,time,datetime;

time_t t1;
float temprature;

while (inFile >> date >> time >> datetime >> t1>> temprature)
{
    cout << t1 << " " << temprature << endl;
}
inFile.close();
return 0;
}
person Hardik Jain    schedule 02.05.2018

Попробуй это...

int main() {
ifstream inFile("filename.txt");
std::string line;
int i = 0;

string date,time,datetime;

time_t t1;
float temprature;

while (std::getline(inFile, line))
{
    inFile >> date >> time >> datetime >> t1>> temprature;
    cout << t1 << " " << temprature<<endl;
}
inFile.close();
return 0;
}
person RAVI VAGHELA    schedule 27.06.2016
comment
Это приведет к отбрасыванию каждой нечетной строки, поскольку getline читает строку, а затем inFile >> также читает строку, но используется только вторая строка. - person DearVolt; 27.10.2017