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