解析文件
来源:互联网 发布:pkpm加密狗 淘宝 编辑:程序博客网 时间:2024/05/20 17:39
#include <iostream>#include <stdio.h>#include "analys.h"using namespace std;#define FGETSMAX 6*1024*1024 //获取一行数据的最大值6MFILE* m_file=NULL;typedef struct object{ //Ob() {}; //Ob(char *v, int l) // : value(v) // , length(l) //{} char* Value; int Length;}Object;/** * note 获取一行数据 * * @param filepath 文件路径 * @param list 目前先用不着· * * @return *///获取int Parse(char *filepath ,int list){ m_file = fopen(filepath, "r"); cout<<filepath<<endl; if(m_file == NULL) { cout<<"file paeh is null"<<endl; return -1; } char* str = new char[FGETSMAX]; int strLen = FGETSMAX; fgets(str,strLen,m_file); cout<<str<<endl; delete str; return 0;}/** * note :切分 字符串 * * @param str: 待分割的字符串 * @param delim: 分隔符字符串 * @param dest: 保存分割后的每个字符串 * @param pCount: 记录一行中分割所得的字符串个数、也就是所谓的列数 * * @return : 正常返回0,字符串为空或者长度为0,则返回-1 */int Segment(char* str,char* delim,char** &dest,int* pCount,Object** ob){ char* tmp; *pCount = 0; if(NULL == str || 0 == strlen(str)) { return -1; } if(NULL == delim || 0 == strlen(delim)) { return -1; } tmp = strtok(str,delim); while(tmp != NULL) { /*int j; for(j=0; tmp[j] != '\0'; j++) { if(tmp[j] == '\n') { cout<<" break"<<endl; break; } (*dest)[j] = tmp[j]; } (*dest)[j] = '\0'; */ int tmpLength = strlen(tmp); //if(tmp[tmpLength] == '\n' || tmp[tmpLength] == '\r') { //判断行尾是回车还是换行,若是,换成'\0' // cout<<"出现换行或者回车"<<endl; // tmp[tmpLength] = '\0'; //} (*ob)->Length = tmpLength; (*ob)->Value = tmp; memcpy((*dest),tmp,tmpLength); (*dest)[tmpLength] = '\0'; dest++; ob++; (*pCount)++; tmp = strtok(NULL,delim); } return 0;}int LoadData(Object** obj, int dataCnt, char *path){ FILE *fp; fp = fopen(path,"a"); if(fp == NULL) { cout<<"open file error"<<endl; } //fseek(fp,0,SEEK_END); static int list = 1; fprintf(fp,"第%d行:\n",list++); for(int i=0; i<dataCnt; i++) { //cout<<"("<<obj[i]->Value<<" ----- "<<obj[i]->Length<<")"<<endl; fprintf(fp,"(%s ---- %d)\n",obj[i]->Value,obj[i]->Length); } fclose(fp); return 0;}int main(int argc,char *argv[]){ if(argc != 3) { return -1; } FILE* fp; char* lineBuf = new char[FGETSMAX]; char* delim = "\t"; //分隔符为:空格 int num = 0; //文件中总的字符串个数 int count = 0; //一行中的字符串个数 int i; Object **tmpOb = new Object*[128]; for( i = 0; i < 128; i++) { tmpOb[i] = new Object[128]; } char** dest = new char*[128]; for( i = 0; i < 128; i++) { dest[i] = new char[128]; } char** tmpDest; tmpDest = dest; if(fp=fopen(argv[1], "r")) { while(fgets(lineBuf, FGETSMAX, fp) != NULL) { //fgets(lineBuf,FGETSMAX,fp);//cout<<"读取的一行:"<<lineBuf<<endl; int lineBufLen = strlen(lineBuf);//cout<<"yi hang de length "<<lineBufLen<<"zuihou yi ge char:"<<lineBuf[lineBufLen]<<"##"<<lineBuf[lineBufLen-1]<<"-----"<<endl;if(lineBuf[lineBufLen-1] == '\n' || lineBuf[lineBufLen-1] == '\r') { //判断行尾是回车还是换行,若是,换成'\0'//cout<<"出现换行或者回车"<<endl;lineBuf[lineBufLen-1] = '\0';}Segment(lineBuf, delim, tmpDest, &count,tmpOb); num = num + count; LoadData(tmpOb,count,argv[2]);} } fclose(fp); /* for(i= 0; i < num; i++) { printf("(%s ,%d)",tmpOb[i]->Value,tmpOb[i]->Length); printf("%s\n",dest[i]); } */ for(int i = 0; i<128; i++) { delete []dest[i]; delete []tmpOb[i]; } delete[]dest; delete[]tmpOb; delete lineBuf; //Parse(argv[1]); return 0;}#include <iostream>
#include <stdio.h>
#include "analys.h"
using namespace std;
#define FGETSMAX 6*1024*1024 //获取一行数据的最大值6M
FILE* m_file=NULL;
typedef struct object
{
//Ob() {};
//Ob(char *v, int l)
// : value(v)
// , length(l)
//{}
char* Value;
int Length;
}Object;
/**
* note 获取一行数据
*
* @param filepath 文件路径
* @param list 目前先用不着·
*
* @return
*/
//获取
int Parse(char *filepath ,int list)
{
m_file = fopen(filepath, "r");
cout<<filepath<<endl;
if(m_file == NULL) {
cout<<"file paeh is null"<<endl;
return -1;
}
char* str = new char[FGETSMAX];
int strLen = FGETSMAX;
fgets(str,strLen,m_file);
cout<<str<<endl;
delete str;
return 0;
}
/**
* note :切分 字符串
*
* @param str: 待分割的字符串
* @param delim: 分隔符字符串
* @param dest: 保存分割后的每个字符串
* @param pCount: 记录一行中分割所得的字符串个数、也就是所谓的列数
*
* @return : 正常返回0,字符串为空或者长度为0,则返回-1
*/
int Segment(char* str,char* delim,char** &dest,int* pCount,Object** ob)
{
char* tmp;
*pCount = 0;
if(NULL == str || 0 == strlen(str)) {
return -1;
}
if(NULL == delim || 0 == strlen(delim)) {
return -1;
}
tmp = strtok(str,delim);
while(tmp != NULL) {
/*int j;
for(j=0; tmp[j] != '\0'; j++) {
if(tmp[j] == '\n') {
cout<<" break"<<endl;
break;
}
(*dest)[j] = tmp[j];
}
(*dest)[j] = '\0';
*/
int tmpLength = strlen(tmp);
//if(tmp[tmpLength] == '\n' || tmp[tmpLength] == '\r') { //判断行尾是回车还是换行,若是,换成'\0'
// cout<<"出现换行或者回车"<<endl;
// tmp[tmpLength] = '\0';
//}
(*ob)->Length = tmpLength;
(*ob)->Value = tmp;
memcpy((*dest),tmp,tmpLength);
(*dest)[tmpLength] = '\0';
dest++;
ob++;
(*pCount)++;
tmp = strtok(NULL,delim);
}
return 0;
}
int LoadData(Object** obj, int dataCnt, char *path)
{
FILE *fp;
fp = fopen(path,"a");
if(fp == NULL) {
cout<<"open file error"<<endl;
}
//fseek(fp,0,SEEK_END);
static int list = 1;
fprintf(fp,"第%d行:\n",list++);
for(int i=0; i<dataCnt; i++) {
//cout<<"("<<obj[i]->Value<<" ----- "<<obj[i]->Length<<")"<<endl;
fprintf(fp,"(%s ---- %d)\n",obj[i]->Value,obj[i]->Length);
}
fclose(fp);
return 0;
}
int main(int argc,char *argv[])
{
if(argc != 3) {
return -1;
}
FILE* fp;
char* lineBuf = new char[FGETSMAX];
char* delim = "\t"; //分隔符为:空格
int num = 0; //文件中总的字符串个数
int count = 0; //一行中的字符串个数
int i;
Object **tmpOb = new Object*[128];
for( i = 0; i < 128; i++)
{
tmpOb[i] = new Object[128];
}
char** dest = new char*[128];
for( i = 0; i < 128; i++)
{
dest[i] = new char[128];
}
char** tmpDest;
tmpDest = dest;
if(fp=fopen(argv[1], "r"))
{
while(fgets(lineBuf, FGETSMAX, fp) != NULL)
{
//fgets(lineBuf,FGETSMAX,fp);
//cout<<"读取的一行:"<<lineBuf<<endl;
int lineBufLen = strlen(lineBuf);
//cout<<"yi hang de length "<<lineBufLen<<"zuihou yi ge char:"<<lineBuf[lineBufLen]<<"##"<<lineBuf[lineBufLen-1]<<"-----"<<endl;
if(lineBuf[lineBufLen-1] == '\n' || lineBuf[lineBufLen-1] == '\r') { //判断行尾是回车还是换行,若是,换成'\0'
//cout<<"出现换行或者回车"<<endl;
lineBuf[lineBufLen-1] = '\0';
}
Segment(lineBuf, delim, tmpDest, &count,tmpOb);
num = num + count;
LoadData(tmpOb,count,argv[2]);
}
}
fclose(fp);
/*
for(i= 0; i < num; i++)
{
printf("(%s ,%d)",tmpOb[i]->Value,tmpOb[i]->Length);
printf("%s\n",dest[i]);
}
*/
for(int i = 0; i<128; i++)
{
delete []dest[i];
delete []tmpOb[i];
}
delete[]dest;
delete[]tmpOb;
delete lineBuf;
//Parse(argv[1]);
return 0;
}
0 0
- 解析文件
- 文件解析
- 解析文件
- 文件解析
- cap文件文件解析
- 解析XML文件___SAX解析
- 文件解析(Java 解析 txt 文件)
- swf文件结构解析
- ISO 文件解析
- RTF文件解析器
- java 解析 xml文件
- torrent文件解析器
- XML文件解析
- XML文件解析
- JstL解析XML文件
- swf文件结构解析
- /etc/fstab文件解析
- 解析INF文件
- 黑马程序员_反射
- Vuejs demo
- 第二阶段来啦啦啦!!!
- Why "INSERT ... ON CONFLICT DO NOTHING/UPDATE" Good for performance
- C语言中微妙的bug(一)
- 解析文件
- 1
- 面试小结三:关于算法数据结构的面试题整理(待续)
- StringBuffer和一些算法 冒泡 二分 选择
- bzoj 2748 [HAOI2012]音量调节
- 九度OJ 1005:Graduate Admission (排序)
- MySQL笔记
- 算法(二)字符串转化为整数
- performance tuning case: array search & date order by , data updated daily (use cursor solve it)