Я написал шаблонную функцию для чтения строковых или числовых данных из файлов и сохранения данных в векторах либо строк, либо целых / двойных чисел. Затем я использую данные для выполнения расчетов с другим кодом, который я написал.
Заранее извиняюсь, потому что я думаю, что это простой вопрос ... Я не могу прочитать в строковых данных, где есть пробел ... Например, имя и фамилия. Когда я хочу «Том Смит», я получаю только «Том»). Из поиска в Google кажется, что проблема в том, что >> и что я должен использовать getline вместо этого. Я попытался заменить >> на getline (test, 100), но я получаю сообщение об ошибке типа «нет соответствия для вызова std :: basic_istringstream ...» (ошибка: нет функции соответствия для вызова std :: basic_ifstream> :: getline (double &) ')
Я был бы очень признателен, если бы кто-то мог исправить меня! Кажется, я просто не могу обойти ручьи!
Это пример данных и мой код. Я настроил его для строк здесь.
labelInFile // Идентификатор подмножества данных для одного вектора
«Том Смит», «Джеки Браун», «Джон Доу» // Эти имена должны заканчиваться как элементы в векторе
#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& test )
{
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 >> test;
results.push_back( test );
}
while ( file.get() != '\n' );
}
}
}
int main ()
{
const std::string theFile = "test.txt"; // Path to file
const std::string findMe = "labelInFile";
std::string test;
std::vector<string> results;
fileRead<std::string>( results, theFile, findMe, test );
cout << "Result: \n";
std::copy(results.begin(), results.end(), std::ostream_iterator<string>(std::cout, "\n"));
return 0;
}