?? filechange3.cpp
字號:
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define NAME_LEN 128
#define ADD_LEN 256
#define TEL_LEN 64
#define MEMO_LEN 64
#define MAX_LINE_LEN 1000
#define MAX_LINE_LEN1 1000
#define MAX_LINE_LEN2 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;
int absort( char *string, int *str)
{
FILE *fp;
FILE *fp_index1;
FILE *fp_index2;
FILE *fp_data1;
// char *string = "2";
char *p = string;
char ch[3];
char name[3];
char name_offset[8];
// char offset[4];
char *stream = "F:\\index11.dat";
char *stream_index1 = "F:\\index1.bin";
char *stream_index2 = "F:\\index2.bin";
char *stream_data1 = "F:\\data1.dat";
CData *buffer = (CData *)new char [sizeof(CData)];
if (( fp = fopen( stream,"wb+"))==NULL)
{
printf ("file cannot be opened\n");
exit(1);
}
if (( fp_index1 = fopen(stream_index1,"rb+"))==NULL)
{
printf ("file cannot be opened\n");
exit(1);
}
if (( fp_index2 = fopen(stream_index2,"rb+"))==NULL)
{
printf ("file cannot be opened\n");
exit(1);
}
if (( fp_data1 = fopen(stream_data1,"rb+"))==NULL)
{
printf ("file cannot be opened\n");
exit(1);
}
while ( fread (name_offset,7,1,fp_index1))
{
int index_temp=0;
name[0]=name_offset[0];
// name[1]=name_offset[1];
name[1]='\0';
// offset[2]=name_offset[5];
// offset[3]=name_offset[4];
// offset[4]=name_offset[3];
// offset[5]=name_offset[2];
if( name_offset[3]<0 )
{
index_temp= name_offset[4]*(0xFF+0x01)+ (0x100+name_offset[3]);
}
else if( name_offset[4]<0)
{
index_temp= (0x100+name_offset[4])*(0xFF+0x01)+ name_offset[3];
}
else if(name_offset[3]<0 && name_offset[4]<0)
{
index_temp= (0x100+name_offset[4])*(0xFF+0x01)+ (0x100+name_offset[3]);
}
else
{
index_temp= name_offset[4]*(0xFF+0x01)+ name_offset[3];
}
ch[0] = *p;
//ch[1] = *(p+1);
ch[1] = '\0';
if ( !(strcmp(name, ch)) ) //
{
/*
if( name_offset[3]<0 )
{
index_temp= name_offset[4]*(0xFF+0x01)+ (0x100+name_offset[3]);
}
*/
fprintf(fp,"%s\t%d\n",ch,index_temp);
// 一級索引的偏移量已經檢測出
///索引長度的確定
int iIndexTempNext=0;
int iIndexTempLength=0;
fread (name_offset,7,1,fp_index1);
if( name_offset[3]<0 )
{
iIndexTempNext= name_offset[4]*(0xFF+0x01)+ (0x100+name_offset[3]);
}
else if( name_offset[4]<0)
{
iIndexTempNext= (0x100+name_offset[4])*(0xFF+0x01)+ name_offset[3];
}
else if(name_offset[3]<0 && name_offset[4]<0)
{
iIndexTempNext= (0x100+name_offset[4])*(0xFF+0x01)+ (0x100+name_offset[3]);
}
else
{
iIndexTempNext= name_offset[4]*(0xFF+0x01)+ name_offset[3];
}
iIndexTempLength=iIndexTempNext-index_temp;
char Index2Content[1000]; // 修改的地方
///////////////////////讀取二級索引的內容///////////////////////////////////////
if(fseek( fp_index2, index_temp,SEEK_SET))
{
perror( "Fseek failed" );
}
if (fread (Index2Content,iIndexTempLength,1,fp_index2))
{
int iNumIndex=(iIndexTempLength+1)/4;
for (int temp=1; temp<iNumIndex; temp++)
{
int iIndex2TempNext=0;
if( Index2Content[(4*temp)-1] < 0 )
{
iIndex2TempNext= Index2Content[4*temp]*(0xFF+0x01)+ (0x100+Index2Content[4*temp-1]);
}
else if( Index2Content[4*temp]<0)
{
iIndex2TempNext= (0x100+name_offset[4])*(0xFF+0x01)+ Index2Content[4*temp-1];
}
else if(Index2Content[4*temp-1]<0 && Index2Content[4*temp]<0)
{
iIndex2TempNext= (0x100+Index2Content[4*temp])*(0xFF+0x01)+ (0x100+Index2Content[4*temp-1]);
}
else
{
iIndex2TempNext= Index2Content[4*temp] * (0xFF+0x01)+ Index2Content[4*temp-1];
}
*str = iIndex2TempNext;
str++;
fprintf(fp,"%s\t%d\n",ch,iIndex2TempNext);
}
str[temp] = '\0';
return(iNumIndex-1);
}
}
}
delete []buffer;
buffer = NULL;
fclose(fp);
fclose(fp_index1);
fclose(fp_index2);
fclose(fp_data1);
return 0;
}
int SearchEngLish ( char *buf1)
{
FILE *fp1;
FILE *fp_data1;
char *stream_data1 = "F:\\data1.dat";
char *stream1 = "F:\\index11111.dat";
char *string2 = buf1;
int length = strlen (string2);
int iNum1;
char iIndex1[2];
int iIndexbuf1[MAX_LINE_LEN1];
int bigbuf1[MAX_LINE_LEN2];
CData *buffer = (CData *)new char [sizeof(CData)];
if (( fp1 = fopen(stream1,"wb+"))==NULL)
{
printf ("file cannot be opened\n");
exit(1);
}
if (( fp_data1 = fopen(stream_data1,"rb+"))==NULL)
{
printf ("file cannot be opened\n");
exit(1);
}
int iFirstNum1 =0;
for ( int i = 0;i < length;i++)
{
iIndex1[0] = string2[i*2];
iIndex1[1] = string2[i*2+1];
iIndex1[2] ='\0';
iNum1 = absort ( iIndex1,iIndexbuf1);
//temp +=iNum;
int a[MAX_LINE_LEN2];
if (0 ==i)
{
for ( int j =0;j<iNum1;j++ )
{
bigbuf1[j] = iIndexbuf1[j];
// fprintf ( fp1,"%s\t%d\n",iIndex,iIndexbuf [j]);
}
bigbuf1[iNum1] = '\0';
iFirstNum1 =iNum1;
}
else
{
for ( int j =0;j<iNum1;j++ )
{
a[j] = iIndexbuf1[j];
// fprintf ( fp1,"%s\t%d\n",iIndex,iIndexbuf [j]);
}
a[iNum1] ='\0';
}
int temp0 =sizeof (bigbuf1);
int temp1 =0;
for (int k=0;k<iFirstNum1; k++)
{
for (int j=0;j<iNum1;j++)
{
if (bigbuf1[k] == a[j])
{
bigbuf1[temp1]=a[j];
temp1++;
// bigbuf[temp] ='\0';
fprintf(fp1,"%d\n", bigbuf1[k]);
// fprintf(fp1,"%d\n", bigbuf[k]);
}
}
}
if(fseek( fp_data1, (bigbuf1[k] - 1)*sizeof(CData),SEEK_SET))
{
perror( "Fseek failed" );
}
while ( fread (buffer,sizeof(CData),1,fp_data1) )
{
if ( strstr ( buffer->Name,string2))
{
fprintf(fp1,"%d\t",buffer->index);
fprintf(fp1,"%d\t",buffer->ID);
fprintf(fp1,"%s\t",buffer->Name);
fprintf(fp1,"%s\t",buffer->Tel);
fprintf(fp1,"%s\t",buffer->Add);
fprintf(fp1,"%f\t",buffer->GIS_X);
fprintf(fp1,"%f\t",buffer->GIS_Y);
fprintf(fp1,"%s\t",buffer->Memo);
fprintf(fp1,"%f\n",buffer->Introduct);
}
}
}
return 0;
}
int main(int argc[],char *argv[])
{
char *p2 = "2658";
// char *p2 = "CHOLCE";
// char *p2 = "spa";
// char *p2 = "pa";
// char *p2 = "s";
SearchEngLish ( p2 );
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -