Linux下解析.csv文件实例(结构体存储字符串,中文乱码ANSI编码问题解决)

一、问题描述


NAME;CLASE;GRADE
小惠                       ;04;91
小明                       ;01;55
科科                       ;03;86
老罗                       ;01;77
老大哥                     ;01;96
老郭                       ;07;86
娇娇                       ;01;75
振宇                       ;05;79
阿来                       ;04;88
CICI                       ;03;99

假设有这么一个.csv文件,有三个字段(NAME,CLASE,GRADE),且数据间通过分号“;”分隔。现在要取用其中的数据,用C语言,在Linux下。

二、分析下

首先,这个.csv文件中有中文,可能涉及到编码转换的问题,可以使用notepad++查看一下格式,或者在Linux下执行file -i查看。由于Linux下一般是以UTF-8为默认编码的,所以如果文件是iso-8859-1(ANSI),在Linux中处理时就要考虑转码。

其次,用什么结构存储这个数据,一般最可能想到的是二维数组,但是这里有字符串(NAME、CLASE)数据,所以除非把GRADE也转变为字符串数据,才能定义一个存储字符串的二维数组,二维数组还要存储字符串,那不就是需要使用三维指针进行操作了么?不是不行,但是有点麻烦。所以,考虑结构体是比较好的选择。用结构体指针,指向一个结构体数组,结构体数组中,每一个结构体存储一个记录(一行)。

typedef struct list_log
{
	char NAME[15];    /*实际测试数据,得到40个左右字节(含有无效空格,为节省内存,不存储)*/
	char CLASE[3];	  /*实际测试数据,得到2字节*/
	char GRADE[3];	  /*实际测试数据,得到2字节*/
} stru_list_record;

然后,考虑.csv文件的字段标题(NAME;CLASE;GRADE)没有什么用,为了处理方便,可以直接除去。

最后,考虑下基本的功能函数应该主要包括:获取.csv数据的行数、列数,解析数据,打印数据。当然,严谨一点,在一开始可以增加一个.csv文件的正确性检查、字符编码转换、备份文件等预备工作的检查函数。

三、代码

代码如下:

/*************************************************************************
	> File Name: csv_prase_V1.0.c
	> Author: hank
	> Mail: 34392195@qq.com 
	> 使用:
	>	可执行文件 csv文件
	>	eg:./main textfile.csv
	>
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值