我有以下文本文件。每个数据字段用|
分隔,行用newline
字符
|1|data1|data2|....|....|....|\n
|2|data2|data3|....|....|....|\n
.
.
我想收集第二个和第三个|
符号之间的数据字段。我的计划是找到第二个|
符号的位置并读取数据直到3 |然后找到新的线符号以重复相同的步骤。听说有位置,可以使用lseek函数移动光标。我可以逐个字符地读取字符,直到找到第二个和第三个|
符号为止,但是我想使用一种更快的方法来找到新的行符号。最有效的方法是什么?以下是我的源代码
std::string str ("1|data1|data2|....|....|....|\n");
std::string str2 ("|");
std::size_t firstpipe = str.find(str2);
std::size_t secondpipe = str.find(str2,secondpipe+1);
if (found!=std::string::npos)
std::cout << "first '|' found at: " << firstpipe << '\n';
std::cout << "scond '|' found at: " << secondpine << '\n';
答案 0 :(得分:1)
使用伪代码:
while( read line with `std::getline` into `std::string`)
find first separator with `std::string::find`
if not found skip line
find second separator with `std::string::find` starting from first separator + 1
if not found skip line
find third separator with `std::string::find` starting from second separator position + 1
use `std::string::substr(secondPos+1,thirdPos-secondPos-1)` to get your datablock.