正在从文件中读取CSV数据
Reading CSV data from a file
如果有人问我这个问题,我很抱歉,但我似乎找不到有帮助的解决方案。我正在尝试从文本文件中读取数据,并最终将其存储在对象中。
文本文件有4个变量,全部用逗号分隔。
我试着这样做:
string v1, v2, v3, v4;
ifstream afile;
afile.open("thefile.txt");
afile >> v1 >> v2 >> v3 >> v4;
afile.close();
cout << v1 << endl;
cout << v2 << endl;
cout << v3 << endl;
cout << v4 << endl;
该文件有多条记录。我现在试着只做1来确保它有效,但当它读取数据时,它不会在逗号处分开。
从那里,我想把数据存储到一个对象中。以下内容是否有效:Thing*thing1=新事物(v1,v2,v3,v4);
不过,当我读到5条记录时,构建上述代码行的最佳方式是什么?由于每个对象都需要一个唯一的名称,有没有一种方法可以让我迭代——也许可以使用for循环和向量?iefor(int i=0;i<5;i++){//读入数据//存储在矢量中}
任何提示都非常感谢
CSV格式比逗号分隔符更复杂。它可以包含引号,您应该对此进行转义和解释,并且可以允许使用不同的分隔符。如果您的输入文件没有严格格式化,那么您确实应该使用专用的CSV导入/导出库。
令牌化器类可能会回答您的问题(例如boost中的类或更简单的类)。
你应该检查一下关于这个主题的其他问题。
Heed@Soravux回答并在可能的情况下使用专门的库。特别是,他建议的strtk工具包看起来很有趣,而且只是一个单独的头。Boost也可以用至少5种不同的方式来实现,如果你打算使用C++一段时间,它是一个值得学习的库。也就是说,所有这些解决方案都会给你的程序增加一些复杂性,而且你很可能想把精力花在其他地方,特别是如果你只需要一个非常简单的数字阅读器的话。以下是如何使用标准C++(使用STL,例如矢量和流):
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
vector<double> &split(const string &s,
char delim, vector<double> &elems)
{
stringstream ss(s);
string item;
while (std::getline(ss, item, delim)) {
stringstream conv( item );
double number;
conv >> number;
elems.push_back(number);
}
return elems;
}
struct my_record_t{
double f1, f2, f3, f4;
};
typedef vector<my_record_t> my_record_vector_t;
int main( int argc, char* argv[])
{
stringstream in("10,20,2.0,5n"
"4.,5.,6.,80n"
"4.,2.,6.,70n"
"4.,5.,6.,86n"
"2.,5.,9.,80n");
// Or alternatively, :
// ifstream in("myfile.csv");
// Here you store your records
my_record_vector_t mrv;
string line;
vector< double > numbers;
while( std::getline( in, line, 'n' ) )
{
numbers.clear();
split( line, ',', numbers);
my_record_t r;
r.f1 = numbers[0];
r.f2 = numbers[1];
r.f3 = numbers[2];
r.f4 = numbers[3];
mrv.push_back( r );
}
cout << mrv.size() << " records read" << endl;
return 0;
}
可能有点太长了,但它可以挽救你的一天。
我会研究使用ifstream读取浮点值,并从逗号解析开始。CSV格式更为复杂,但该示例应该让您开始使用。该示例使用字符串工具包,该工具包非常擅长解析文本并转换为所需的结构元素。
- 无法逐行读取.csv文件
- 使用getline读取.csv文件时出现问题
- 读取.csv文件 c++
- 使用 fstream 读取 csv,并且只阅读 fstream
- 为什么我的getline不正确读取.csv文件
- 如何在 c++ 中跳过读取 csv 文件的第一列
- C++ 读取.csv文件,将数据放入变量中,然后放入对象中
- 如何从输入中读取 CSV 行并将每个值初始化为不同类型的变量?(C++)
- 读取.csv文件并仅使用 C++ 存储到数组中<iostream>
- Linux 与 Windows,C++读取 CSV 文件的运行时性能差异
- 读取 CSV 文件(UNICODE 编码)C++时出现编码错误
- 读取 CSV 文件
- 在C 中读取CSV文件
- 目瞪口呆地寻找一种有效的 c 和 c++ 方法来删除回车符(读取.csv文件)
- 读取CSV文件并将值存储在C 中
- 在C 中读取CSV文件中的两个列
- C :读取csv-file被分开;和 n
- C 读取CSV文件包含空单元
- 在MFC中读取.CSV文件内容
- 正在从文件中读取CSV数据