gpt4 book ai didi

c++ - 在C++中将制表符分隔的文件读取到数组中

转载 作者:太空狗 更新时间:2023-10-29 21:22:43 25 4
gpt4 key购买 nike

我有这样的文件:

int1--tab--int2--tab--int3--tab--int4--tab--换行符

int1--tab--int2--tab--int3--tab--int4--tab--换行符

int1--tab--int2--tab--int3--tab--int4--tab--换行...

我想将每一行保存到一个数组中。我的意思是将所有 int1 都放入一个数组中,并希望对 int2 int3 执行相同的操作...

我真的不知道该怎么做请帮帮我

我已经试着逐行阅读了

#include <sstream>
#include <string>

std::string line;
while (std::getline(infile, line))
{
std::istringstream iss(line);
int a, b;
if (!(iss >> a >> b)) { break; }

}

最佳答案

您使用字符串流的想法是正确的。由于读取分隔文件的代码很可能会再次使用,您可能会发现将其放入类中很有用。这是我个人分隔的 FileReader 类的摘录:

bool FileReader::getrow(RowMap &row){
std::string line = "";
if(std::getline(filehandle,line)){
std::stringstream line_ss(line);
std::string column = "";
unsigned int index = 0;
while(std::getline(line_ss,column,delimiter)){
if(index < headers.size()){
row[headers[index]] = column;
index++;
}
else{
break;
}
}
return true;
}
return false;
}

RowMap 是以下的类型定义:

typedef std::unordered_map<std::string,std::string>

headers 是一个 typedef:

typedef std::vector<std::string> RowHeadersVector;

并且应该有你的列名:

RowHeadersVector headers;
headers.push_back("column_1");

在我的示例中,我使用的是字符串到字符串的映射,但您可以轻松地将其更改为:

typedef std::unordered_map<std::string,int>

使用这样的 map 的好处是自记录代码:

row["column_1"]

关于c++ - 在C++中将制表符分隔的文件读取到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19989727/

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