[英]How to Extract a lines separated by blank lines and store it an array using C++
我有一个文件,如下所示:
*|NET s2 0.019760FF
C1_4 I_1:ZN 0 0.000000FF
C2_4 I_2:A 0 0.000000FF
*|NET s3 0.019760FF
C1_3 I_2:ZN 0 0.000000FF
C2_3 I_3:A 0 0.000000FF
现在假设我有一个字符串数组,
std::vector<std:vector<string>> my_vec
我必须解析此文件并从* | NET提取所有行,直到到达空行并将这些行存储在my_vec [0]中。 类似地,来自* | NET的接下来的3行必须存储在my_vec [1]中。
由于我是C ++的新手,并且不习惯使用文件,因此需要一些帮助来解决此问题。
这是要遵循的一组步骤:
ifstream
读取文件 operator>>
) *|NET
push_back()
, my_vec
的向量 push_back()
到my_vec
back()
处的向量的字符串 线总是按3分组吗? 我宁愿使用TStringList
及其函数LoadFromFile()
。 这将生成一个列表,每行都存储为该列表的单独元素,并且可以使用->operator [](i)
进行访问,其中i是该行的索引(int)。
如果它们被3分组,则可以进行for循环,在其中取i,i + 1和i + 2并将它们添加到my_vec[j]
(其中j是向量的适当元素)。 请注意,列表元素的类型将为AnsiString,使用c_str()
函数可以轻松更改其类型并将其转换为字符串。 即,您可以这样listOfLines->operator [](i).c_str()
: listOfLines->operator [](i).c_str()
然后,您可以简单地将j递增1,将i递增3。当到达列表末尾时,循环应该结束->即i < listOfLines->Count() - 2
。
如果这些行未按3进行分组,则可以进行循环以首先搜索空的AnsiString,然后获取它们的索引并将它们放在另一个数组中。 然后,在另一个循环中,类似于上面的循环,可以获取此数组的j元素,并使用arrayOfEmptyRowNumbers[j]
递增i。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.