我写了一个模板函数,用于从文件中读取字符串或数字数据,并将数据保存在字符串或整数/双精度的向量中 . 然后我使用数据用我写的另一个代码执行计算 .
提前道歉,因为我认为这是一个简单的问题...我无法读取有空格的字符串数据...例如,名字和姓氏 . 当我想要“汤姆史密斯”时,我只能得到“汤姆” . 从谷歌搜索,似乎问题是>>,我应该使用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;
}
2 回答
我编写了一些代码来解决你的部分问题:解析名称 . 您可以根据自己的需求进行调整 . 注意:这不是解决此问题的最快方法,但这是一种希望易于理解的简单方法 .
Test.cpp
Test.dat
Results
以下是
fileRead
的摘录 . 我只更改了行(1)
. 有了这个改变,据我所知,您的代码似乎按预期工作 .希望这可以帮助