2015-06-04 69 views
-2

C++初学者项目,帮助程序从某些行开始读取。C++:如何开始读取txt文件中的某些行?

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

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

我可以阅读一个案例,但是在编写循环时可能会遇到三种情况。我如何告诉C++它需要从第四行开始并且执行与第一个case相同的迭代?以下是我对第一个案子所做的事情。

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

通常情况下最简单的方法就是调用'std :: getline'所需的次数并忽略它读取的字符串。你可以使用'忽略',但它更多的工作(通常很少或没有任何好处)。 –

+0

没有办法直接跳到任意一行的开始,除非所有行的长度完全相同。您需要阅读并跳过您不想要的内容。 –

回答

2

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

在这种情况下,您唯一的问题是读取数字并不会消耗跟随它们的换行符,所以当您在此之后使用getline时,单行换行符会成为第一个“行”,并且很快会遇到当您尝试将地址读入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 3倍。