带有混合分隔符和数据类型的C ++文件输入

时间:2015-04-14 23:28:03

标签: c++ io

我正在尝试从文本文件中输入数据: 线格式如下...... String | String | int double

实施例: 鲍勃|橘子| 10 .89

我可以使用以字符串形式获取该行 Getline(infile,line)

我不明白如何将这一行分解为字符串变量中的不同变量。

由于

2 个答案:

答案 0 :(得分:1)

首先,您可以使用strchr编写一些很好的老式c代码。

如果使用std :: String

,请使用string.find / find_first_of

http://www.cplusplus.com/reference/string/string/find_first_of/

答案 1 :(得分:0)

您将此标记为C ++。所以也许你应该尝试使用格式化的提取器......

这是一个' ram'文件(就像磁盘文件一样工作)

std::stringstream ss("Bob|oranges|10 .89");
//               this ^^^^^^^^^^^^^^^^^^ puts one line in file

我会使用getline作为两个字符串,使用bar终结符

do {
   std::string cust;
   (void)std::getline(ss, cust, '|'); // read to 1st bar

   std::string fruit;
   (void)std::getline(ss, fruit, '|'); // read to 2nd bar

然后直接读取int和float:

   int count = 0;
   float cost;
   ss >> count >> cost;  // the space char is ignored by formatted extraction

   std::cout  << "\ncust: " << cust << "\n"
              << "      " << count << "  " << fruit
             << " at $"   << cost
             << " Totals: "  << (float(count) * cost)  << std::endl;

   if(ss.eof())  break;

}while(0);

如果你要处理更多行,你需要找到eoln,并重复上述风格的每一条记录。

这种方法非常脆弱(格式的任何更改都会强制更改代码)。

这只是为了让你开始。根据我的经验,使用std :: string find和rfind不那么脆弱。

祝你好运。