📄 filechange.cpp
字号:
#include <iostream>
using namespace std;
//#include <fstream.h>
#include <stdio.h>
#include <stdlib.h>
#define NAME_LEN 128
#define ADD_LEN 256
#define TEL_LEN 64
#define MEMO_LEN 64
#define MAX_LINE_LEN 1000
typedef struct _CData
{
long index; //索引号
long ID; //采编编号
char Name[NAME_LEN+1]; //名称
char Tel[TEL_LEN+1]; //电话号码
char Add[ADD_LEN+1]; //地址
double GIS_X; //x坐标
double GIS_Y; //y坐标
char Memo[MEMO_LEN+1]; //备注
long Introduct; //介绍在intro.txt文件中所在的文件位置
}CData;
/*
解析一行Outlook的数据,解析结果存入data
返回值:
-1: 数据出错,解析失败
0:解析成功
*/
int parseLine(char *line, CData *data, FILE *fp_intro)
{
char *p1=line;
char *p2=NULL;
if( !line )
{
return -1;
}
p2 = strstr(p1, "\t");
if( p2 )
{
*p2 = '\0';
}
else
{
return -1;
}
data->ID = atoi(p1);
p1=p2+1;
p2 = strstr(p1, "\t");
if( p2 )
{
*p2 = '\0';
}else{
return -1;
}
strncpy(data->Name, p1, NAME_LEN);
data->Name[NAME_LEN]='\0';
p1=p2+1;
p2 = strstr(p1, "\t");
if( p2 )
{
*p2 = '\0';
}
else
{
return -1;
}
strncpy(data->Tel,p1,TEL_LEN);
data->Tel[TEL_LEN]='\0';
p1=p2+1;
p2 = strstr(p1, "\t");
if( p2 )
{
*p2 = '\0';
}
else
{
return -1;
}
strncpy(data->Add,p1,ADD_LEN);
data->Add[ADD_LEN]='\0';
p1=p2+1;
p2 = strstr(p1, "\t");
if( p2 )
{
*p2 = '\0';
}
else
{
return -1;
}
data->GIS_X=atof(p1);
p1=p2+1;
p2 = strstr(p1, "\t");
if( p2 )
{
*p2 = '\0';
}
else
{
return -1;
}
data->GIS_Y=atof(p1);
p1=p2+1;
//判断是否有介绍文字
data->Introduct = -1;
if( !p1 )
{
return 0;
}
else
{
if( strstr(p1, "NULL") )
{
return 0;
}
else if( strlen (p1) > 4 )
{
data->Introduct = ftell(fp_intro);
fprintf(fp_intro, "%d\t%s\n", data->index, p1);
//读取时:
//if( data->Introduct != -1 )
//{
// fseek(fp_intro, data->Introduct, SEEK_SET);
// fscanf(fp_intro, "%d\t%s", record_id, intro);
//}
}
}
return 0;
}
int main(int argc[],char *argv[])
{
FILE *fp;
FILE *fp1;
FILE *fp2;
FILE *fp3;
FILE *fp_intro;
int bCount=0;
int iOffset_temp=0;
int iNum_index1=0;
int iNum_index2=0;
int iNum_index3=0;
int iNum_index4=0;
int iNum_index5=0;
int iNum_index6=0;
char ch0[51];
char ch[51];
unsigned char high;
unsigned char low;
char line[MAX_LINE_LEN+1];
int count = 0;
char *stream = "F:\\黄页信息.txt";
char *Write_stream="F:\\data1.dat";
char *Write_stream1="F:\\introduce.dat";
char *Write_stream2="F:\\index2.dat";
char *Write_stream3="F:\\index1.dat";
// char ch;
// CData *p;
CData *buffer=(CData *)new char[sizeof(CData)];
//char *buffer=new char[1024];
memset(buffer,0,sizeof(CData));
if ((fp=fopen( stream ,"r"))==NULL)
{
printf("file cannot be opened\n");
exit(1);
}
if ((fp1=fopen(Write_stream,"wb+"))==NULL)
{
printf("file cannot be opened\n");
exit(1);
}
if ((fp2=fopen(Write_stream2,"wb+"))==NULL)
{
printf("file cannot be opened\n");
exit(1);
}
if ((fp3=fopen(Write_stream3,"wb+"))==NULL)
{
printf("file cannot be opened\n");
exit(1);
}
// while ((ch=fgetc(fp))!=EOF)
// fputc(ch,CData);
// *p++=ch;
//fread(buffer,sizeof(CData),1,fp);
// CData buffer[1000];
// int i=0;
//创建一个介绍文件
//fp_intro
if((fp_intro=fopen(Write_stream1,"wt"))==NULL)
{
printf("file cannot be opened\n");
exit(1);
}
//读取时:
// if( data->Introduct != -1 )
// {
// fseek(fp_intro, data->Introduct, SEEK_SET);
// fscanf(fp_intro, "%d\t%s", record_id, intro);
// }
//
while( fgets(line, MAX_LINE_LEN, fp) )
{
// i++;
line[MAX_LINE_LEN]='\0';
if( -1 == parseLine(line, buffer, fp_intro) )
{
// printf("file cannot be write to buffer\n");
//exit(1);
// buffer[count]=line
//error process;
}
count ++;
buffer->index = count;
fwrite(buffer,sizeof(CData),1,fp1);
// fread(buffer,sizeof(CData),1,fp1);
}
fseek ( fp1,0,0 );
// short int code = (unsigned char )ch[0]*0XFF + (unsigned char )ch[1];
for(high=0x81;high<0xFF;high++)
{
for(low=0x05;low<0xFF;low++)
{
if( low==0x7F )
{
continue;
}
ch[0]=high;
ch[1]=low;
ch[2]=0;
// printf("%s",ch);
while (fread(buffer,sizeof(CData),1,fp1))
{
char *p=buffer->Name;
while(*p)
{
if(*p<0)
{
ch0[0]=*p;
ch0[1]=*(p+1);
ch0[2]='\0';
p+=2;
if( strstr ( ch, ch0 ) )
{
if(0==bCount)
{
// iOffset=fp2-fp_index_temp;
fprintf(fp3,"%s\t%d\n",ch,iOffset_temp);
iNum_index1=fprintf(fp2,"%s\t%d",ch,buffer->index);
iOffset_temp+=iNum_index1;
bCount=1;
}
else
{
iNum_index2=fprintf(fp2,"\t%d",buffer->index);
iOffset_temp+=iNum_index2;
}
}
}
else
{
p++;
}
}
}
iNum_index3=fprintf(fp2,"\n");
iOffset_temp+=iNum_index3;
bCount=0;
fseek ( fp1,0,0 );
}
}
fseek(fp1,0,0);
for(high='0';high<='z';high++)
{
ch[0]=high;
ch[1]='\0';
// printf("%c\n", high);
while (fread(buffer,sizeof(CData),1,fp1))
{
char *p=buffer->Name;
while(*p)
{
if(*p>0)
{
ch0[0]=*p;
ch0[1]='\0';
p++;
if( strstr ( ch, ch0 ) )
{
if (0==bCount)
{
fprintf(fp3,"%s\t%d\n",ch,iOffset_temp);
iNum_index4=fprintf(fp2,"%s\t%d",ch,buffer->index);
iOffset_temp+=iNum_index4;
bCount++;
}
else
{
iNum_index5=fprintf(fp2,"\t%d",buffer->index);
iOffset_temp+=iNum_index5;
}
}
}
else
{
p++;
}
}
// fprintf(fp2,"%s\t%d\n",ch,buffer->index);
}
bCount=0;
iNum_index6=fprintf(fp2,"\n");
iOffset_temp+=iNum_index6;
fseek(fp1,0,0);
}
// code = (unsigned char)ch1*0xFF+(unsigned char)ch2 - 0x8000;
delete []buffer;
buffer=NULL;
fclose(fp);
fclose(fp1);
fclose (fp2);
fclose(fp3);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -