linux下的CSV文件操作

先介绍一下什么是csv文件,这是一种简单的文本文件,也被称为逗号分隔值文件。

主要是用于存储简单的数据,下面在weindows下用UE简单生成一下文件。


然后用excel打开


这就是一个简单的csv文件,每个字符都是一个ANSI码,图中的第一行,1,2,3,4,5,7。

1~7每一个都是一个ANSI码,一个逗号也是ANSI码。

第二行的12,13,434,45,56,747,“12”存储的是两个ANSI码,而“747”则存储了三个ANSI码,他们之间以逗号分隔。

类似的,第三行的“a”是一个ANSI码,“cd”是两个ANSI码。

也就是说,无论每一个逗号分隔的一个数值是多大,每一个值都是一个字符,如果换个理解方式就是,csv文件是一个很长很长的字符串。

然后是文件的大小,这个文件的大小是49字节。


通过直接数字符的方式,发现只有45个字符,包括所有逗号,多出了4个字节。

多出的四个字节在UE中看不到,这其实是windows独有的换行符“\r\n”,占了两个字符,45加上第一行和第二行的换行符就得到了49个字节的大小。

然后是关于文件名,windows默认文件名长256个字节,大小是固定的,但是不会再属性里面体现出来。

备注:linux的换行符是“\n”,占一个字符。


好了,关于csv文件的介绍到此结束。

下面是关于文件操作介绍,主要用到stdio.h这个文件头,这个是标准输入输出的一个头包含文件,为什么会将文件的操作放在标准输入输出的头包含文件里面,而不是重新创建一个file.h,按照《c语言程序设计——现代方法》的说法,所有的输入输出都是一种流,输入称为输入流,输出称为输出流,文件的读操作称为输入流,写操作称为输出流,就像往屏幕上打印东西称为输出流,键盘输入称为输入流,一切与系统的交互,本质上都是一种输入输出的行为。

然后是打开linux,用vim生成一个test.c文件,然后键入如下代码

#include "stdio.h"

int main(void)
{
	FILE *f0;
	char array[] = "1,2,3,4,5,7\n12,13,434,56,747\na,b,cd,efg,h,ij";
	char array0[100];
	
	if(NULL == (f0=fopen("/home/ma/TEST/ma.csv","a")))//打开一个ma.csv文件,
	{                                                 //如果不存在就创建
		printf("can't  not open file\n");
	}
	else
	{
		printf("Created file succeed!\n");//创建成功就输出这句话
		fwrite(array,sizeof(array),1,f0);//给文件写入array数组
		fread(array0,sizeof(array),1,f0);//然后将文件内容读取到array0中
		printf("%s\n",array0);//输出文件内容
		fclose(f0);//关闭文件
	}
}

在linux下的操作截图如下



先用gcc 编译test.c,生成a.out,然后强制执行a.out,这里有个小细节,在linux下,生成的a.out文件一般用户是没有执行权限的,如果不限输入sudo的话,需要对当前的文件夹获取写入权限,使用chmod这个命令。执行a.out之后,生成了一个ma.csv文件,再说一件事,在linux下,一切都是文件,而文件名仅仅是一个标识符,"*.csv"是没有意义的,不要在意拓展名是啥,这仅仅起到一个关联执行程序的意义,对真实的文件内容没有啥关系。


好了,这是一个简单的文件操作入门,具体的文件操作函数我就不介绍了,请参考 《c语言程序设计——从入门到放弃》。


写于2017年5月27日 

深圳





  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中,可以使用C++标准库中的fstream库来读取CSV文件,这个库提供了对文件的输入和输出操作。以下是在Linux中使用fstream库读取CSV文件的示例代码: ```c++ #include <fstream> #include <iostream> #include <string> #include <vector> using namespace std; int main() { ifstream file("/path/to/file.csv"); string line; vector<vector<string>> data; while (getline(file, line)) { vector<string> row; string cell; for (char c : line) { if (c == ',') { row.push_back(cell); cell.clear(); } else { cell += c; } } row.push_back(cell); data.push_back(row); } for (auto row : data) { for (auto cell : row) { cout << cell << ", "; } cout << endl; } return 0; } ``` 以上代码中,首先包含了fstream、iostream和string等头文件,然后使用ifstream类创建了一个文件流对象file,打开了名为“file.csv”的CSV文件。接着使用getline()方法逐行读取CSV文件的内容,并将每行数据按逗号分隔,存储到一个二维vector容器data中。最后使用for循环遍历data容器,并将每个元素输出到控制台中。 需要注意的是,在使用fstream库读取CSV文件时,需要使用getline()方法逐行读取文件内容,并使用逗号分隔每个数据项。同时,需要考虑CSV文件中可能存在的特殊字符和异常情况,如空行、空格、引号等。 以上就是在Linux中使用C++读取CSV文件的方法,可以根据具体的需求选择使用fstream库或者其他第三方库来处理CSV文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值