Чтобы использовать код, который я написал для выполнения вычислений, мне нужно прочитать данные (числа и строки) из внешнего текстового файла и сохранить их в векторах либо строк, либо целых / двойных чисел.Я написал шаблонную функцию для этого.CashCow, Говард Хиннант и Вильгельмтелл любезно помогли с предыдущей проблемой.
Кажется, что функция работает нормально для целых / двойных чисел, но у меня проблема со строковыми данными.
Мне нужны данные из ОДНОЙ строки моего внешнего файла, чтобы перейти в вектор, ноФункция читает в несколько строк.Вот что я имею в виду.Допустим, это то, что находится во внешнем текстовом файле (ниже):
vectorOne // Идентификатор подмножества данных для одного вектора
'1' '2' '3'// Эти значения должны входить в один вектор, (vectorOne)
vectorTwo // Идентификатор подмножества данных для другого вектора (vectorTwo)
'4' '5' '6' //Эти значения должны входить в другой вектор
vectorThree // Идентификатор подмножества данных для другого вектора (vectorThree)
'7' '8' '9' // Эти значения должны входить вдругой вектор
Если я ищу идентификатор / метку подмножества данных (например, vectorOne), я хочу, чтобы только данные из следующей строки попадали в мой вектор результатов.Проблема в том, что ВСЕ данные ниже идентификатора / метки попадают в вектор результатов.Так что если vectorTwo - это то, что я хочу, я ожидаю, что мой вектор результатов будет содержать элементы «4, 5, 6».Но между прочим, он содержит от 4 до 9. В моем коде (ниже) я подумал, что строка:
while ( file.get() != '\n' );
гарантирует, что чтение остановится на новой строке (т. Е. После каждой строки данных).
Буду очень признателен за любые предложения относительно того, что происходит не так.
Вот код (для ясности, я настроил его для строк):
#include <algorithm>
#include <cctype>
#include <istream>
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
using namespace std;
template<typename T>
void fileRead( std::vector<T>& results, const std::string& theFile, const std::string& findMe, T& temp )
{
std::ifstream file( theFile.c_str() );
std::string line;
while( std::getline( file, line ) )
{
if( line == findMe )
{
do{
std::getline( file, line, '\'' );
std::getline( file, line, '\'');
std::istringstream myStream( line );
myStream >> temp;
results.push_back( temp );
}
while ( file.get() != '\n' );
}
}
}
int main ()
{
const std::string theFile = "test.txt"; // Path to file
const std::string findMe = "labelInFile";
std::string temp;
std::vector<string> results;
fileRead<std::string>( results, theFile, findMe, temp );
cout << "Result: \n";
std::copy(results.begin(), results.end(), std::ostream_iterator<string>(std::cout, "\n"));
return 0;
}
Спасибо