解析csv格式文件的一段C代码
2011-03-04 12:41
696 查看
CSV逗号分隔值文件(Comma Separated value),是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件。
维基词条:
英文 http://en.wikipedia.org/wiki/Comma-separated_values
中文 http://zh.wikipedia.org/wiki/CSV
自写的一段解析csv格式文件的代码,供参考:
维基词条:
英文 http://en.wikipedia.org/wiki/Comma-separated_values
中文 http://zh.wikipedia.org/wiki/CSV
自写的一段解析csv格式文件的代码,供参考:
#include <stdio.h> #include <stdlib.h> int f3(int argc, char **argv); int main(int argc, char **argv) { f3(argc, argv); } int f3(int argc, char *argv[]) { char sFilename[100+1]; FILE *fp; char sLine[1000+1]; int i=0; int iFlg=0; //0-无左引号 1-有左引号 char sLine2[1000+1]; char sField[100+1]; int iStart=0; int iLen=0; memset(sFilename, 0, sizeof(sFilename)); strcpy(sFilename, argv[1]); if(strlen(sFilename) == 0) { strcpy(sFilename, "test.csv"); } printf("sFilename[%s]/n", sFilename); fp = fopen(sFilename, "r"); if(fp == NULL) { printf("fopen error/n"); return -1; } memset(sLine, 0, sizeof(sLine)); memset(sLine2, 0, sizeof(sLine2)); while(fgets(sLine, sizeof(sLine)-1, fp) != NULL) { //去掉行尾的换行符 sLine[strlen(sLine)-2] = 0; sLine[strlen(sLine)-1] = 0; printf("-----------------------------------------/n"); printf("sLine[%s]/n", sLine); //赋值第一个field的开始 iStart = 0; //重置第一个field的长度 iLen = 0; for(i=0; i<=strlen(sLine); i++) { //printf("c[%c], iStart[%3d], iLen[%3d]/n", sLine[i], iStart, iLen); if(sLine[i]=='"') { if(iFlg == 0) //遇到field的左边界(双引号开始) { iFlg = 1; } else //遇到field的右边界或field中的双引号 { if(sLine[i+1] != '"') //如果下一个字符不是双引号,则遇到field的右边界 { iFlg = 0; } else //如果下一个字符是双引号,则是field中的双引号 { //跳过下一个双引号不处理 i++; //累计field的长度 iLen++; } } } //printf("{%c %d}", sLine[i], iFlg); //遇到逗号且不在双引号内,或遇到结束符时 if((sLine[i] == ',' && iFlg != 1) || sLine[i] == '/0') { //获取field值 memset(sField, 0, sizeof(sField)); memcpy(sField, sLine+iStart, iLen); printf("/ni[%3d], iStart[%3d], iLen[%3d], ", i, iStart, iLen); printf("sField[%s] --> ", sField); //把连续两个双引号替换成一个双引号 iReplaceStr(sField, "/"/"", "/""); //删除逗号(用于金额域) //iDelStr(sField, ","); printf("[%s]/n", sField); //处理field的值 //your code here... //赋值下一个field的开始 iStart = i+1; //重置下一个field的长度 iLen = 0; } else { //累计field的长度 iLen ++; } } } fclose(fp); return 0; } /* 功能:删除字符串s1里的字符串s2,改变字符串s1 返回:0 成功,-1 失败 */ int iDelStr(char *s1, char *s2) { char *p; if(strlen(s1) <= 0 || strlen(s2) <= 0) { return -1; } while((p = strstr(s1, s2)) != NULL) { strcpy(p, p+strlen(s2)); } return 0; } /* 功能:把字符串s1里的字符串s2,替换成s3,改变字符串s1, s3的长度必须比s2小,以防s1溢出 返回:0 成功,-1 失败 */ int iReplaceStr(char *s1, char *s2, char *s3) { char *p; if(strlen(s1) <= 0 || strlen(s2) <= 0 || strlen(s3) <= 0) { return -1; } if(strlen(s3) > strlen(s2)) { return -1; } while((p = strstr(s1, s2)) != NULL) { memcpy(p, s3, strlen(s3)); strcpy(p+strlen(s3), p+strlen(s2)); } return 0; }
相关文章推荐
- mp4文件格式解析——直接上代码,详细
- xlsx文件解析处理:openpyxl库 csv文件格式生成:csv
- 如何解析CSV文件的示例代码
- CSV格式文件解析
- CSV格式文件解析
- 自制工具:CSV代码生成器:自动生成CSV文件对应的C++实体类和字段类型解析代码
- Cocos2dx杂记:cocos2dx解析csv格式文件
- 导出下载csv格式的表格(逗号分隔文件)的servlet代码,留待以后调用
- CSV文件格式解析
- java解析csv 文件代码
- WAV文件格式分析解析,代码已附
- CSV文件格式解析
- asp.net+js 实现无刷新上传解析csv文件的代码
- python读取与写入csv格式文件的示例代码
- 详解php几行代码实现CSV格式文件输出
- wav文件格式分析详解和解析代码
- mp4文件格式解析,为demux准备的代码
- MP4文件格式简要解析---代码解析
- wav文件格式分析详解和解析代码
- CSV文件格式 解析csv格式的java函数