我的文本文件如下所示:
987 10.50 N 50
383 9.500 N 20
224 12.00 N 40
我想只读第二列数据。我怎么会这样做?
答案 0 :(得分:5)
如果不阅读其他内容,您不能只阅读第二栏。
您可以做的是读取所有数据,并忽略除第二列之外的所有内容。例如,读取一行数据(包含std::getline
),然后从中提取int
和double
,但忽略int
和该行的其余部分。
答案 1 :(得分:5)
您需要读取所有数据,并丢弃不需要的字段(即“列”)。包含%*d
的格式字符串就是这样做的。
在 C 中,它可能类似于(假设f
是FILE*
句柄)
while (!feof(f)) {
int n=0; double x=0.0; char c[4]; int p=0;
if (fscanf(f, " %*d %f %*[A-Z] %*d", &x) < 1)
break;
do_something(x);
}
PS。感谢Jerry Coffin的评论
答案 2 :(得分:2)
C89 / C90具有函数strtok
,可用于逐行读取文件,使用“space”分隔符分隔列,然后您可以访问第n个标记(表示第n个标记)文件中的一行)。
strtok
在
http://cplusplus.com/reference/cstring/
某些实现还具有名为strtok_r
的线程安全可重入版本。
答案 3 :(得分:0)
在 C ++ 中,您可以考虑使用std::istringstream
,这需要包含:#include <sstream>
。类似的东西:
std::ifstream ifs("mydatafile.txt");
std::string line;
while(std::getline(ifs, line)) // read one line from ifs
{
std::istringstream iss(line); // access line as a stream
// we only need the first two columns
int column1;
float column2;
iss >> column1 >> column2; // no need to read further
// do what you will with column2
}
std::istringstream
所做的是允许您将std::string
视为输入流,就像常规文件一样。
您可以使用iss >> column1 >> column2
将列数据读入vaiables。