使用分隔符读取文本文件

时间:2012-11-10 09:05:25

标签: c++

我有一个文本文件,内容是

Point1, [5, 6]
Line2, [1, 2, 3], [-5, 55, 33]
Point2, [5, 3, 1]
Line1, [1, 2], [5, 7]

我会做比较,比如第一个变量(Point1,Line2,Point2,Line1)

如果是point1,它将被存储到第1点数组中,5被设置为x,y被设置为6。

如何将分隔符设置为逗号以及'['和']'。我只需要变量Point1,5和6来相应地存储它们。

2 个答案:

答案 0 :(得分:1)

我会以最简单的方式解决这个问题 - 使用getline读取文件,然后用空格替换,[]的所有出现。然后,您可以使用std::istringstream中的<sstream>阅读所有输入。你也可以使用正则表达式(如果你使用boost或c ++ - 11),但我相信我建议应该做的工作。

编辑:这是一个如何做我建议的例子。我只会告诉你如何输入点,处理行,你必须根据名称添加一个if语句。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
  string line;

  while (getline(cin, line)) {
    for (unsigned i = 0; i < line.size(); ++i) {
      if (line[i] == '[' || line[i] == ']' || line[i] == ',') {
        line[i] = ' ';
      }
    }
    istringstream in(line);

    string name;
    double x,y;
    in >> name >> x >> y; // Point1 <x> <y>
    ... do something with the point...
  }

  return 0;
}

此外,您可以使用replace_if中的<algorithm>替换符号,但我认为您更容易理解此解决方案。

答案 1 :(得分:1)

您可以使用json-cpp库。它有类似的语法:

{
 "Point1" : [5, 6],
 "Line2": {
     "param1" : [1, 2, 3],
     "param2" : [-5, 55, 33]
    },
  "Point2" : [5, 3, 1],
  "Line1" : {
   "param1" : [1, 2],
   "param2" : [5, 7]
   }
}