[英]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.