gpt4 book ai didi

c++ - 尝试用 C++ 编写一个只读取第一列数据并跳到下一行的类

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:28 24 4
gpt4 key购买 nike

这可能是一个非常简单的问题,但我还没有找到任何示例来指导我。我正在尝试用 C++ 编写类,它可以读取一个文本文件,其中数据列(float、char、int 等)由空格分隔。我希望类(class)能够忽略某些列并读取指定的列。现在我正在试验一列和两列格式并从那里取得进展。下面列出了一个测试输入文件的简短示例。

103.816   
43.984
2214.5
321.5
615.8
8.186
37.6

我第一次尝试编写读取一列数据的代码是微不足道的,看起来像这样。

void Read_Columnar_File::Read_File(const std::string& file_name)
{
int i;
std::ifstream inp(file_name,std::ios::in | std::ios::binary);
if(inp.is_open()) {
std::istream_iterator<float> start((inp)), end;
std::vector<float> values(start,end);
for(i=0; i < 7; i++) std::cout << values[i] << std::endl;
}
else std::cout << "Cannot Open " << file_name << std::endl;
inp.close();
}

在我的下一次尝试中,我尝试只读取两列格式中的一列,如下所示的输入。这些数字只是为了这个例子而编造的

103.816   34.18
43.984 21.564
2214.5 18.5
321.5 1.00
615.8 4.28
8.186 1.69
37.6 35.48

我稍微修改了代码格式,使其看起来像下面的示例。我在 inp >> 语句之后使用了一个简短的伪代码来说明我试图让代码在阅读完第一列后跳到下一行。我的问题是“如何让代码只读取第一列然后跳到下一行,它再次只读取第一列数据并让它一直这样做直到文件结束?”提前感谢您提供的任何建议。

void Read_Columnar_File::Read_File(const std::string& file_name)
{
int i;
float input;
std::vector<float> values;
std::ifstream inp(file_name,std::ios::in | std::ios::binary);
if(inp.is_open()) {
for(i=0; i < 7; i++) {
inp >> input >> \\ - At this point I want the code to skip to the next
\\ line of the input file to only read the first column
\\ of data
values.push_back(input);
}
for(i=0; i < 7; i++) std::cout << values[i] << std::endl;
}
else std::cout << "Cannot Open " << file_name << std::endl;

inp.close();
}

最佳答案

您可以使用成员函数ignore() 丢弃所有字符直到下一行。我还将修复您的代码以使用基于提取成功的 for() 循环,这样您的代码将适用于任意数量的列,而不仅仅是 7:

for (float input; inp >> input; values.push_back(input))
{
inp.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

关于c++ - 尝试用 C++ 编写一个只读取第一列数据并跳到下一行的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26812956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com