⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filechange3.cpp

📁 通过该程序代码可以快速的进行英语方面的饿搜索
💻 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 + -