如何在c ++中获取列号?

时间:2017-01-03 10:19:47

标签: c++ string c++11 data-structures

我想知道给出标题时的列号。

例如S Mac Bonded State SIS Qos(DS-US) CPE MAC address IP Address

第1列为S,2为Mac,3为Bonded,4为State,5为SIS,6为Qos(DS-US) },7为CPE,8为MAC address,9为IP Address

问题是,如果基于空格" "的拆分,MAC和地址将被视为不正确的列。

我正在解析的文件的前3行

S/C/CH-S/CG/CH    Mac   Bonded State       SIS  Qos(DS-US)   CPE  MAC address     IP Address
12/0/18-1/0/0     1      4x4   Operational 3.0   120M/12M      0  000f.c22a.7014  10.135.148.24
12/0/0-1/0/4      1      4x4   Operational 3.0   120M/12M      0  1121.10fc.3993  10.135.148.50
12/0/8-1/0/0      1      4x4   Operational 3.0   120M/12M      0  1121.81fc.1234  10.135.148.43

列总是在同一位置对齐,所以这可以是一个解决方案,但我不知道如何获得位置。

什么是解决问题的最佳方法?

3 个答案:

答案 0 :(得分:0)

您可以使用其他分隔符来拆分列。例如,代替空格(" "),您可以使用逗号(",")或连字符("-")。我建议使用可能无法在文件中的其他位置使用的内容来避免任何错误。

答案 1 :(得分:0)

使用boost::algorithm::split_regex

std::vector<std::string> result;
std::string str = "S    Mac   Bonded State       SIS  Qos(DS-US)   CPE  MAC address"
boost::algorithm::split_regex( result, str, regex( "  " ) ) ;

如果您想接受多个空格作为分隔符,只需使用正则表达式"\s{2,}"

答案 2 :(得分:0)

您应该根据列位置进行拆分。

第一项从第1列开始,在第18列结束,第二项从第19列开始,到第25列结束等。

分为两个阶段:

阶段1:

根据列位置拆分行:

  • "12/0/18-1/0/0 "
  • "1 "
  • "4x4 "
  • "Operational "
  • "3.0 "
  • "120M/12M "
  • "0 "
  • "000f.c22a.7014"
  • "10.135.148.24"

阶段2:

剥离尾随空格,这将导致:

  • "12/0/18-1/0/0"
  • "1"
  • "4x4"