C ++:如何从txt文件中的某些行开始读取?

时间:2015-06-04 00:14:45

标签: c++ loops

C ++初学者项目,帮助让程序从某些行开始读取。

我们有一个输入txt文件,其中包含一些客户信息:名称,地址,两个数字,每个部分占一行。我们需要读取文件,打印出名称,地址,用数字进行一些计算,并将所有三个输出发送到输出文件。

txt文件包含3个案例(9行)。

我可以阅读一个案例,但是在写一个可以通过三个案例的循环时遇到了麻烦。我怎样才能告诉c ++它需要从第四行的开头开始并执行与第一种情况相同的迭代?以下是我对第一个案例的处理。

    getline(infile, customerName);
    getline(infile, customerAddress);
    infile >> sqFeetOfTile >> costPerSqFt;

1 个答案:

答案 0 :(得分:2)

听起来你实际上并不想开始在第四行阅读(跳过三行),但是你想要阅读三行,然后继续第四行。

在这种情况下,您唯一的问题是,阅读这些数字并不会消耗跟随它们的换行符,因此当您getline之后,单独的换行符将成为第一行"行&#34 ;,之后不久,当您尝试将地址读入sqFeetOfTile时,您会遇到错误。

执行此操作的最佳方法是始终阅读完整的行 如果一行包含多个部分,请将其转换为std::istringstream并从中读取部分 此方法不会在流中留下任何杂散换行符,您可以从第一个记录停止的位置继续。

像这样:

void processOneCustomer(std::istream& infile)
{
    std::string customerName;
    std::getline(infile, customerName);
    std::string customerAddress;
    std::getline(infile, customerAddress);
    std::string numbers;
    std::getline(infile, numbers);
    std::istringstream numberstream(numbers);
    float sqFeetOfTile = 0;
    int costPerSqFeet = 0;
    numbers >> sqFeetOfTile >> costPerSqFt;
    // Output customer data
    // Do calculations
}

// ...

while (inFile)
{
    processOneCustomer(inFile);
}

(当然,真正的代码应该检查错误和类似的东西。)

如果你想跳过前三行,只需拨打std::getline三次。