从文件中读取和填充单独的变量
reading and filling separate variables from file
我正在做一项家庭作业,从文件中读取公司数据,然后对其进行错误处理。
到目前为止,我认为第一行可以用,但我不确定如何让它读到每一行。每一行都是带有ID、名称和付款的记录。基本上,我想知道如何在处理完第一行之后跳到下一行。我还没有包括错误检查,但我认为它将在读取1条记录后的最后一个do-wile循环中。如果读取到每个变量中的信息是错误的,我可以检查它并将其输出到摘要文件或错误文件中。
void processFile()
{
string filename;
ifstream recordFile;
ofstream summary("summary.dat");
ofstream error("error.dat");
cout << "Please enter a filenamen";
do
{
cin >> filename;
recordFile.open(filename);
if (!recordFile.is_open())
cout << "No file by that name. Please enter another filenamen";
}
while(!recordFile.is_open());
int ID = 0;
string firstName;
string lastName;
double payment1, payment2, payment3 = (0.00, 0.00, 0.00);
string numberOfRecords;
getline(recordFile, numberOfRecords);
do
{
ws(recordFile);
recordFile >> ID;
recordFile >> firstName;
recordFile >> lastName;
recordFile >> payment1;
recordFile >> payment2;
recordFile >> payment3;
}
while(!recordFile.eof());
}
*编辑:我发现了我的部分问题,实际上我需要跳过第一行,从那一点开始继续阅读。每个文件的第一行都有无用的数据
在ifstream
对象上使用getline
函数
两件事。第一个是如果你必须阅读多个记录,并且每条记录都是一条新行,最佳解决方案几乎是始终使用std::getline
逐行读取,然后使用std::istringstream
将行(记录)分解为所需字段。这具有保持输入同步的优点,甚至如果出现错误;你不必担心skp领先多少或忽略。
第二点是,您正在检查eof()
。这几乎总是一个错误;有时,它也会让你读一行在许多情况下,以及在其他情况下,忽略最后一行或字段。如果如果输入成功(并且您只能在尝试输入之后检查文件结尾),则流在条件语境;否则,它将表现为虚假。所以你的循环应该是:
std::string line;
while ( std::getline( recordFile, line ) ) {
std::istringstream record( line );
record >> ID;
if ( ! record ) ...
// ...
}
最后一点:所有的CCD_ 6算子都去掉了前导空间,所以您不需要呼叫ws
。另一方面,在上述情况下模式,您可能想做一些类似的事情:
if ( record >> ws && record.get() != EOF ) {
// Unexpected garbage at end of line...
}
在循环的最后,验证是否没有多余的文本。
相关文章:
- 如何在类中递增单独的变量,而不是对象本身?
- 不生成单独约束的变量的 Gurobi 影子价格
- 简单的问题 - 如何从单独的"结构"内的'class'访问变量?
- 在这种情况下,当尝试从单独的类更新变量时,我是否需要使用指针?
- 如何将整数值解析为逗号分隔字符串中的单独 int 变量?
- Qt读取串行输入,然后将其拆分为单独的变量
- 模块名称是否驻留在单独的"name space"中,或者它们可能与例如变量名称发生冲突?
- 如何在单独文件中定义的成员函数中使用成员变量
- 使用/创建/修改单独.cpp文件中的变量
- 如何为同一类对象的成员函数保留单独的变量副本?
- 在 c++ 中将字符串拆分为单独的变量
- 如何将要分配给具有不同索引的单独变量分配给C 的单独变量
- 变量只能全局"declared",但不能修改/(单独初始化)
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- 如何将__DATE__和__TIME__宏拆分为变量声明的单独组件
- C++无法在单独函数中的变量之间建立通信
- 使用局部全局变量在单独的线程中运行C函数
- C 细分故障由全局变量在单独的源文件中引起
- 变量模板的单独定义
- 从文件中读取和填充单独的变量