C++ c++;用于文件读取分隔符但样式不同的函数

C++ c++;用于文件读取分隔符但样式不同的函数,c++,function,C++,Function,我想制作一个解析器,从txt文件中读取一行,如: INDORE|NJ|201568|A| UJJAIN|AB|3458|B| 他们的任何内置函数都可以一次读取一行。。。 通过格式说明符捕获相应编码变量中的值。。但是用分隔符分隔值 位置,名称,…等都是变量 我在matlab中找到了一个函数“strread”,它可以做这种事情。假设str是一个流,因为所有变量都是字符串,所以可以简单地使用std::getline和'.作为分隔符 std::getline(str, location, '|');

我想制作一个解析器,从txt文件中读取一行,如:

INDORE|NJ|201568|A|
UJJAIN|AB|3458|B|
他们的任何内置函数都可以一次读取一行。。。 通过格式说明符捕获相应编码变量中的值。。但是用分隔符分隔值

位置
名称
,…等都是变量


我在matlab中找到了一个函数“strread”,它可以做这种事情。

假设
str
是一个流,因为所有变量都是字符串,所以可以简单地使用
std::getline
'.
作为分隔符

std::getline(str, location, '|');
std::getline(str, name, '|');
std::getline(str, phno, '|');
std::getline(str, tok, '|');
您甚至可以将其包装到可变模板函数中,该函数接受您想要读取的所有参数

void readParams(std::istream& stream, char delim)
{
}

template<typename ... Tail>
void readParams(std::istream& stream, char delim, std::string& string, Tail& ... t)
{
  std::getline(stream, string, delim);
  readParams(stream, delim, t ...);
}

如果您被限制使用没有可变模板的编译器,您仍然可以为所需的参数数量添加一些重载,并在稍后阶段用真正的可变模板替换它们。

可能会更舒适一些。。。输入文件是a | b | c|

#include <stdio.h>

int main ()
{
  char str1 [80] = {0};
  char str2 [80] = {0};
  char str3 [80] = {0};
  FILE * pFile;

  pFile = fopen ("a.txt","r");
  fscanf(pFile, "%[^|]|%[^|]|%[^|]|", str1, str2, str3); 
  fclose (pFile);
  return 0;
}

以7秒之差击败它…:我想为我所有不同的文件创建一个函数,它有时将空格作为标记,逗号作为标记,。我已经在文件解析中使用了这个getline函数,但是现在我必须将它绑定到一个函数中。。比如一个是整数,另一个是字符,等等,如果我的变量都是不同类型的。。比如一个是整数,另一个是字符,等等
readParams(str, '|', location, name, phno, tok);
#include <stdio.h>

int main ()
{
  char str1 [80] = {0};
  char str2 [80] = {0};
  char str3 [80] = {0};
  FILE * pFile;

  pFile = fopen ("a.txt","r");
  fscanf(pFile, "%[^|]|%[^|]|%[^|]|", str1, str2, str3); 
  fclose (pFile);
  return 0;
}
  char str1 [80] = {0};
  char str2 [80] = {0};
  int i;
  fscanf(pFile, "%[^|]|%[^|]|%d|", str1, str2, &i);