我想知道给出标题时的列号。
例如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
列总是在同一位置对齐,所以这可以是一个解决方案,但我不知道如何获得位置。
什么是解决问题的最佳方法?
答案 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"