有效地读取角色的位置

时间:2018-11-11 17:52:16

标签: c++

我有以下文本文件。每个数据字段用|分隔,行用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';

1 个答案:

答案 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.