C++如何读取CSV文件的一行多个数据?

viqlegg 2015-03-08 02:13:12
像图片中,其实只有四行数据,但每一行的数据都很多,而且数目不定,这种csv文件怎么读取和在程序中输出?

...全文
2295 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
核桃不好吃 2016-10-18
  • 打赏
  • 举报
回复
引用 8 楼 cjqpker 的回复:
给你示例代码

#include <iostream>
#include <sstream>
#include <fstream>

using namespace std;

int main()
{
	string line, number;
	ifstream f("D:\\test.txt", ifstream::_Nocreate);
	if (f.fail())
	{
		cout << "Cannot open file" << endl;
		return -1;
	}
	while(std::getline(f, line))
	{
		istringstream is(line);
		while(std::getline(is, number, ','))
		{
			cout << number << "  ";
		}
		cout << endl;
	}
}
这个非常棒,简单实用
赵4老师 2015-03-09
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
假正经的班长 2015-03-09
  • 打赏
  • 举报
回复
给你示例代码

#include <iostream>
#include <sstream>
#include <fstream>

using namespace std;

int main()
{
	string line, number;
	ifstream f("D:\\test.txt", ifstream::_Nocreate);
	if (f.fail())
	{
		cout << "Cannot open file" << endl;
		return -1;
	}
	while(std::getline(f, line))
	{
		istringstream is(line);
		while(std::getline(is, number, ','))
		{
			cout << number << "  ";
		}
		cout << endl;
	}
}
sniffer12345 2015-03-08
  • 打赏
  • 举报
回复
引用 3 楼 u012890357 的回复:
[quote=引用 2 楼 taodm 的回复:] C++啊,读这个太简单了吧 先getline,然后用istringstream分拆。当然了,因为你这个csv文件简单。 如果是复杂的,就需要上正则了。
能求一下代码吗?实在不会啊。。[/quote] 大家一般是指方向,不会有具体的说帮忙实现的 如果你实现不了,那你就先尝试下一行行读取,用getline,然后再搜索下用c++做split 如果你连getline都不会,你就得先学学如何读取文件 如果这都不会,那你就别用C++,用python什么的这些你会的或者容易的 如果还是不会,那先学程序再说
ri_aje 2015-03-08
  • 打赏
  • 举报
回复
引用 5 楼 u012890357 的回复:
[quote=引用 4 楼 ri_aje 的回复:] getline 按行读取,然后 boost split string 按 , 分解就行。
有代码参考一下吗?[/quote] 连个测试文件都没有,我也懒得写代码。
viqlegg 2015-03-08
  • 打赏
  • 举报
回复
引用 4 楼 ri_aje 的回复:
getline 按行读取,然后 boost split string 按 , 分解就行。
有代码参考一下吗?
ri_aje 2015-03-08
  • 打赏
  • 举报
回复
getline 按行读取,然后 boost split string 按 , 分解就行。
viqlegg 2015-03-08
  • 打赏
  • 举报
回复
引用 2 楼 taodm 的回复:
C++啊,读这个太简单了吧 先getline,然后用istringstream分拆。当然了,因为你这个csv文件简单。 如果是复杂的,就需要上正则了。
能求一下代码吗?实在不会啊。。
taodm 2015-03-08
  • 打赏
  • 举报
回复
C++啊,读这个太简单了吧 先getline,然后用istringstream分拆。当然了,因为你这个csv文件简单。 如果是复杂的,就需要上正则了。
relaxisland 2015-03-08
  • 打赏
  • 举报
回复
如果没有引号什么等特殊格式,自己写吧 读入一行,然后自己根据逗号分隔, 或者用split函数
可用于对VC++C++ Builder、Delphi、VB、C/C++、ASM、Java、C#、SQL 等程序源码进行详细的统计,可以准确的分析出程序中代码行、注释行和空白行的行数。程序会自动根据你选择的文件类型选择相应的统计方式,并将所有文件的分析结果进行汇总,便于方便直观的对软件项目的代码量进行全面的评估。本软件是绿色软件,不需要安装,展开到任意目录,直接运行即可。 1、 支持VC++项目文件的统计方式。 2、 支持C++ Builder项目文件的统计方式。 3、 支持C/C++文件 .cpp 和 .h 的文件统计。 4、 支持同时多个文件的统计方式。 5、 支持同时多种文件类型的统计方式。 6、 支持VB项目文件和 .frm 和 .bas 文件的统计。 7、 支持汇编文件 .asm 和 .inc 的统计。 8、 支持Delphi项目文件 .dpr 和 .pas、.dfm 文件的统计。 9、 支持C#项目文件 .csproj 的直接统计及 .cs 文件的统计。 10、支持Java文件 .java 的统计。 11、支持SQL文件 .sql 的统计。 12、支持 *.* 文件类型的自动分析统计。 13、支持文件目录的选择统计方式。 14、支持用户自定义文件统计类型及统计方法。 15、支持Htm,Excel,Csv,Txt等多种存盘文件类型。 16、支持统计结果的直接打印输出。 17、支持命令行方式的文件及目录统计方式。 18、支持资源管理器右键关联的文件及目录快捷统计方式。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧