一个读text文本文件和解析文本的例子(C语言)
2015-05-02 23:35
330 查看
一个读text文本文件和解析文本的例子。
(1)引入头文件
(1)引入头文件
#include <stdio.h> #include <stdlib.h> #include <string.h>(2)函数int initConfigFile(const char * pFileName)
/** * initConfigFile() * return: * 1 create file success * 0 create file failed */ int initConfigFile(const char * pFileName) { int rval = 0; FILE *pFile; char buffer[1024] = {0}; int strLen = 0; int bytes = 0; if ((pFile = fopen(pFileName, "wb")) == NULL) { printf("File cannot be created\n"); return rval; } sprintf(buffer, "GPRMC;204522/00;A;2233.94321;N;11402.42498;E"); strLen = strlen(buffer); bytes = fwrite(buffer, 1, strLen, pFile); if (bytes == strLen) { printf("Initial Configuration File success!\n"); rval = 1; } fclose(pFile); return rval; }(3)函数int parseConfigFile(const char * pFileName)
/** * parseConfigFile() * return: * 1 parse file success * 0 parse file failed */ int parseConfigFile(const char * pFileName) { int rval = 0; FILE *pFile; long file_size = 0; char *buffer = NULL; long bytes = 0; long i = 0; long numberCRLF = 0; int semiNum = 0; // Number of semicolon int slashNum = 0; // Number of slash long strLen = 0; char *array = NULL; char *pos1 = NULL; char *pos2 = NULL; ////////////////////////////////////////////////////////////////////////// if ((pFile = fopen(pFileName, "rb")) == NULL) { printf("File cannot be opened\n"); return rval; } fseek(pFile, 0, SEEK_END); file_size = ftell(pFile); rewind(pFile); printf("file_size: %d\n", file_size); buffer = (char*)malloc(sizeof(char) * (file_size + 1 + 1)); // +1 For strcat(buffer, ";"); later. if (!buffer) { printf("Insufficient memory available\n" ); fclose(pFile); return rval; } memset(buffer, 0, (file_size + 1 + 1)); // +1 For strcat(buffer, ";"); later. bytes = fread(buffer, sizeof(char), file_size, pFile); printf("read char: %d\n", bytes); buffer[file_size] = '\0'; if (file_size == bytes) { printf("read:\n%s\n", buffer); } else { printf("read error\n"); fclose(pFile); free(buffer); return rval; } fclose(pFile); ////////////////////////////////////////////////////////////////////////// // 1. Check the numbers of semicolon and slash strLen = strlen(buffer); for (i = 0; i < strLen; i ++) { if (';' == buffer[i]) { semiNum++; } else if ('/' == buffer[i]) { slashNum++; } } printf("semicolon: %d, slash: %d\n", semiNum, slashNum); if ((semiNum < 6) || (slashNum < 1)) { printf("Configuration file invalid!\n"); rval = initConfigFile(pFileName); return rval; } ////////////////////////////////////////////////////////////////////////// // 2. Delete CRLF, beginning of string strLen = strlen(buffer); array = (char *)malloc(sizeof(char) * (strLen + 1)); if (!buffer) { printf("Insufficient memory available\n" ); fclose(pFile); return rval; } memset(array, 0, (strLen + 1)); pos2 = buffer; for (i = 0; i < strLen; i++) { if (('\r' == buffer[i]) || ('\n' == buffer[i])) { pos2++; } else { break; } } strcpy(array, pos2); strcpy(buffer, array); printf("Delete CRLF, beginning of string:\n%s\n", buffer); ////////////////////////////////////////////////////////////////////////// // 3. Delete CRLF, end of string strLen = strlen(buffer); free(array); array = (char *)malloc(sizeof(char) * (strLen + 1)); if (!buffer) { printf("Insufficient memory available\n" ); fclose(pFile); return rval; } memset(array, 0, (strLen + 1)); numberCRLF = 0; for (i = (strLen - 1); i >= 0; i--) { if (('\r' != buffer[i]) && ('\n' != buffer[i])) { break; } else { numberCRLF++; } } strncpy(array, buffer, (strLen - numberCRLF)); strcpy(buffer, array); printf("Delete CRLF, end of string:\n%s\n", buffer); ////////////////////////////////////////////////////////////////////////// // 4. Remove spaces at the beginning of the string strLen = strlen(buffer); free(array); array = (char *)malloc(sizeof(char) * (strLen + 1)); if (!buffer) { printf("Insufficient memory available\n" ); fclose(pFile); return rval; } memset(array, 0, (strLen + 1)); pos2 = buffer; for (i = 0; i < strLen; i++) { if (' ' == buffer[i]) { pos2++; } else { break; } } strcpy(array, pos2); strcpy(buffer, array); printf("Remove spaces at the beginning of the string:\n%s\n", buffer); ////////////////////////////////////////////////////////////////////////// // 5. parse the string strcat(buffer, ";"); strLen = strlen(buffer); free(array); array = (char *)malloc(sizeof(char) * (strLen + 1)); if (!buffer) { printf("Insufficient memory available\n" ); fclose(pFile); return rval; } memset(array, 0, (strLen + 1)); pos1 = NULL; pos2 = buffer; pos1 = strstr(pos2, ";"); while (NULL != pos1) { strncpy(array, pos2, (pos1 - pos2)); array[(pos1 - pos2)] = '\0'; printf("array: %s\n", array); pos2 = pos1 + 1; pos1 = strstr(pos2, ";"); } free(array); free(buffer); rval = 1; return rval; }(4)main函数
int main(int argc, char *argv[]) { int result =0; result = parseConfigFile("config.ini"); if (result) { printf("Parse File success!\n"); } else { printf("Parse File failed!\n"); } return 0; }
相关文章推荐
- Flex中通过设置textAlign样式在一个List控件中改变文本对齐方向的例子
- Flex中如何通过leading样式在一个text控件中设置文本铅框(text leading)的例子
- c语言一个处理文本文件的例子
- 一个php作的文本留言本的例子(五)
- Flex中通过设置textAlign和headerStyleName样式设置DateChooser控件头部年月文本对齐方式的例子
- 理解C语言声明的优先级规则(一个复杂的例子)
- reStructuredText:所见即所得的文本标记语法解析工具
- Android如何在一个TextView中实现多种文本风格?
- 使用libtidy解析html文档的小例子一个
- 一个php作的文本留言本的例子(二)
- Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView
- (二)Java解析XML:一个简单的解析XML文件的例子
- 一个发送、接收、解析、返回xml的好例子
- 一个使用C#的TPL Dataflow Library的例子:分析文本文件中词频
- 如何使用epoll? 一个C语言的简单例子 - asdfjkl210 - ITeye技术网站
- Flex中如何在Panel控件的status文本中添加一个链接的例子
- 一个php作的文本留言本的例子(一)
- Android如何在一个TextView中实现多种文本风格?
- c语言中函数的嵌套调用(关于函数声明的一个例子)
- 贴一个刚写的 词法解析程序吧(C语言),很简陋,呵呵。。。