记录一次入坑的linux下c语言解析txt文件
2018-01-07 22:09
579 查看
一、读取文件中的一行
读取txt文件比较简单:
关键函数就是fgets()
fgets(…)读入文本行时的两种情况。
1.如果n大于一行的字符串长度,那么当读到字符串末尾的换行符时,fgets(..)会返回。并且在s的最后插入字符串结束标志’\0’。 而s缓冲区剩余的位置不会再填充。
此时,读入七个字符,123abc\n,实际上还有最后的’\0’,所以,strlen(s)=7; 如果要去除末尾的\n,s[strlen(s)-1]=’\0’;便可。
2.如果n小于等于一行的字符串的长度,那么读入n-1个字符,此时并没有读入\n因为并没有到行尾 ,同样在最后会插入’\0’.
这时读入4个字符,123a,并没有换行符,所以strlen(s)=4.
二、解析文件中的一行
需要使用
注意,这里后面用来存放字符串的数组,一定要够大,坑就在于这里:数组长度没有存放’\0’的地方,运行后一直出现奇怪的解析结果。5位的数组,解析后居然是10几个字符,明显不对,后来检查是数组设置的长度不够。
三、链表存放配置文件
读入一个文件,然后按行解析,最后返回链表头。
读取txt文件比较简单:
FILE* conf_file= fopen(conffile, "r"); char conf_line[512]; while (fgets(conf_line, sizeof(conf_line), conf_file)!=NULL) { //获取了一个字符串conf_line //对字符串进行解析 }
关键函数就是fgets()
fgets(…)读入文本行时的两种情况。
1.如果n大于一行的字符串长度,那么当读到字符串末尾的换行符时,fgets(..)会返回。并且在s的最后插入字符串结束标志’\0’。 而s缓冲区剩余的位置不会再填充。
example:123abc fgets(s,10,fp);
此时,读入七个字符,123abc\n,实际上还有最后的’\0’,所以,strlen(s)=7; 如果要去除末尾的\n,s[strlen(s)-1]=’\0’;便可。
2.如果n小于等于一行的字符串的长度,那么读入n-1个字符,此时并没有读入\n因为并没有到行尾 ,同样在最后会插入’\0’.
example:123abc fgets(s,5,fp);
这时读入4个字符,123a,并没有换行符,所以strlen(s)=4.
二、解析文件中的一行
需要使用
sscanf(conf_line,"%[^,],%[^,],%s",pNew->station,pNew->name,pNew->cropnm);
注意,这里后面用来存放字符串的数组,一定要够大,坑就在于这里:数组长度没有存放’\0’的地方,运行后一直出现奇怪的解析结果。5位的数组,解析后居然是10几个字符,明显不对,后来检查是数组设置的长度不够。
三、链表存放配置文件
struct conf_st { char station[6]; char name[128]; char cropnm[256]; struct conf_st *next; };
struct conf_st *get_conf(char conffile[]) { struct conf_st *pHead = (struct conf_st*)malloc(LEN_CONF); struct conf_st *pTail = pHead; pTail->next = NULL; FILE* conf_file= fopen(conffile, "r"); char conf_line[512]; while (fgets(conf_line, sizeof(conf_line), conf_file)!=NULL) { struct conf_st *pNew=(struct conf_st*)malloc(LEN_CONF); sscanf(conf_line,"%[^,],%[^,],%s",pNew->station,pNew->name,pNew->cropnm); pTail->next=pNew; pNew->next=NULL; pTail=pNew; } fclose(conf_file); return pHead; }
读入一个文件,然后按行解析,最后返回链表头。
相关文章推荐
- Linux中记录终端输出到txt文本文件
- 用两个文件a.txt;b.txt.使用linux命令,复制,a.txt文档倒数第十行的记录to b.txt文档
- 记录一次Linux操作系统最大文件数限制的解决过程
- ROS-indigo下创建工作空间,创建程序包,package.xml,CMakeLists.txt相关代码记录及文件解析
- linux中用C语言实现的自动在文件末尾不断添加记录的完整代码
- linux下 c语言多文件编译
- Linux中ELF文件动态链接的加载、解析及实例分析(一): 加载
- Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- Intel平台下Linux中ELF文件动态链接的加载、解析及实例分析(一):
- 解析LINUX的passwd文件
- Linux下C语言实现文件复制
- ASP.NET中记录Log到txt文件的方法
- 在linux中写txt文件
- 解析Linux特殊文件
- linux读取文件中的一行,解析字符串并赋值给变量
- linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- C语言解析CSV文件!
- 【推荐】解析Linux系统根文件系统的目录树,让你对linux更深的认识
- 从linux中的mysql数据库提取数据直接生成txt文件。
- Fedora 8 Linux下GRUB配置文件详细解析