📄 myfile.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "MyFile.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
int i;
CharacterBegin=0;
CharacterEnd=0;
HanZiCounter=0;
RadioGroup1->ItemIndex=0;
for(i=0;i<MAXHANZICOUNT;i++)
HanZiLibrary[i]=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileListBox1DblClick(TObject *Sender)
{
AnsiString TempString;
TempString=FileListBox1->Directory;
TempString+="\\";
TempString+=FileListBox1->Items->Strings[FileListBox1->ItemIndex];
if(ListBox1->Items->IndexOf(TempString)==-1)
{
ListBox1->AddItem(TempString,ListBox1);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
AnsiString TempString;
for(i=0;i<FileListBox1->Items->Count;i++)
{
if(FileListBox1->Selected[i])
{
TempString=FileListBox1->Directory;
TempString+="\\";
TempString+=FileListBox1->Items->Strings[i];
if(ListBox1->Items->IndexOf(TempString)==-1)
{
ListBox1->AddItem(TempString,ListBox1);
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DirectoryListBox1DblClick(TObject *Sender)
{
FileListBox1->Mask=FilterComboBox1->Mask;
FileListBox1->Update();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
{
ListBox1->DeleteSelected();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i;
HanZiCounter=0;
for(i=0;i<MAXHANZICOUNT;i++)
{
HanZiLibrary[i]=0;
}
AnsiString TempDirString;
for(i=0;i<ListBox1->Items->Count;i++)
{
TempDirString=ListBox1->Items->Strings[i];
ScanOneCppFile(TempDirString);
}
SortTheHanZiLib();
CreateTheHanZiFon();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScanOneCppFile(AnsiString CppFileToOpen)
{
char FileNameStr[100];
unsigned char TempString[MAXCHARACTERNUM];
int i,k,j;
int iMaskBeginPos=0,iMaskEndPos=0, LineBufPointer=0;
unsigned char HasBlockMaskFlag=0,EndLoopFlag;
FILE *FilePointer;
FilePointer=NULL;
for(k=0;k<100;k++)FileNameStr[k]='\0';
strcpy(FileNameStr,CppFileToOpen.c_str());
if((FilePointer=fopen(FileNameStr,"r+t"))==NULL)
{
Application->MessageBox("文件打开错误", "错了", MB_OK);
return;
}
fseek(FilePointer,0L,SEEK_SET);
while(!feof(FilePointer))
{
for(k=0;k<MAXCHARACTERNUM;k++)
{
LineBuf[k]=0;
TempString[k]=0;
}
LineBufPointer=0;
if(fgets(TempString,MAXCHARACTERNUM-1,FilePointer)==NULL) continue;
i=0; iMaskBeginPos=0; iMaskEndPos=0; HasBlockMaskFlag=0;
EndLoopFlag=1;
while(EndLoopFlag&&!feof(FilePointer))
{
if(HasBlockMaskFlag&&TempString[i]==';') EndLoopFlag=1;
if(!HasBlockMaskFlag&&TempString[i]==';') EndLoopFlag=0;
if(!HasBlockMaskFlag&&TempString[i]=='\n'&&LineBufPointer>MAXCHARACTERNUM-256) EndLoopFlag=0;
if(TempString[i]=='/' && TempString[i+1]=='*')
{
iMaskEndPos=i;
for(k=iMaskBeginPos;k<iMaskEndPos;k++)
{
LineBuf[LineBufPointer++]=TempString[k];
if(LineBufPointer>=MAXCHARACTERNUM)
{
LineBufPointer=0;
for(j=0;j<MAXCHARACTERNUM;j++)
{
LineBuf[j]=0;
}
}
}
HasBlockMaskFlag=1;//有块注释
i++;
}
else if(HasBlockMaskFlag && TempString[i]=='*' && TempString[i+1]=='/')
{
HasBlockMaskFlag=0;
iMaskBeginPos=i+2;
i++;
}
else if(!HasBlockMaskFlag && TempString[i]=='/' && TempString[i+1]=='/')
{
iMaskEndPos=i;
for(k=0;k<iMaskEndPos;k++)
{
LineBuf[LineBufPointer++]=TempString[k];
if(LineBufPointer>=MAXCHARACTERNUM)
{
LineBufPointer=0;
for(j=0;j<MAXCHARACTERNUM;j++)
{
LineBuf[j]='\0';
}
}
}
iMaskEndPos=0; iMaskBeginPos=0;
for(k=0;k<MAXCHARACTERNUM;k++)
{
TempString[k]='\0';
}
if(!EndLoopFlag)
{
if(fgets(TempString,MAXCHARACTERNUM-1,FilePointer)==NULL) continue;
i=0;
}
}
else if((TempString[i]==';'||TempString[i]=='\n' || TempString[i]=='\0'))
{
if(!HasBlockMaskFlag)
{
iMaskEndPos=i;
for(k=iMaskBeginPos;k<iMaskEndPos;k++)
{
LineBuf[LineBufPointer++]=TempString[k];
if(LineBufPointer>=MAXCHARACTERNUM)
{
LineBufPointer=0;
for(j=0;j<MAXCHARACTERNUM;j++)
{
LineBuf[j]='\0';
}
}
}
iMaskBeginPos=0; iMaskEndPos=0;
if(TempString[i]!=';')
{
for(k=0;k<MAXCHARACTERNUM;k++)
{
TempString[k]='\0';
}
i=0;
if(fgets(TempString,MAXCHARACTERNUM-1,FilePointer)==NULL) continue;
}
}
else
{
iMaskBeginPos=0; iMaskEndPos=0;
for(k=0;k<MAXCHARACTERNUM;k++)
{
TempString[k]='\0';
}
if(fgets(TempString,MAXCHARACTERNUM-1,FilePointer)==NULL) continue;
i=0;
}
}
else i++;
}
LineBuf[LineBufPointer]='\0';
AnalyseTheLine();
}
fclose(FilePointer);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AnalyseTheLine(void)
{
int i,row,k=0;
unsigned char NotEndFlag=1;
unsigned char FindStringFlag;
FindStringFlag=0;
for(row=0;row<MAXROWNUM;row++)
{
for(i=0;i<MAXCHARNUMBER;i++)
StringBuffer[row][i]=0;
}
CharacterEnd=0;
CharacterBegin=0;
i=0;row=0;
while(NotEndFlag)
{
if(LineBuf[i]=='\0') NotEndFlag=0;
if(LineBuf[i]=='"')
{
if(!FindStringFlag)
{
CharacterBegin=i;
FindStringFlag=1;
}
else
{
FindStringFlag=0;
CharacterEnd=i;
}
}
if(CharacterEnd>CharacterBegin)
{
for(k=CharacterBegin+1;k<CharacterEnd;k++)
{
StringBuffer[row][k-CharacterBegin-1]=LineBuf[k];
}
row++;
CharacterEnd=0;
CharacterBegin=0;
}
i++;
}
for(i=0;i<row;i++)
{
GetChineseString(StringBuffer[i]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GetChineseString(unsigned char *TheChineseString)
{
int i=0;
int FindedHanZiPos=0;
unsigned int cChineseDot=0;
while(TheChineseString[i]!='\0')
{
if(TheChineseString[i]<0xa1)
{
i++;
}
else
{
FindedHanZiPos=SearchInHanZiLib(TheChineseString[i],TheChineseString[i+1]);
if(FindedHanZiPos>=0)
{
HanZiLibrary[2*FindedHanZiPos]++;
i+=2;
}
else
{
HanZiLibrary[2*HanZiCounter]++;
cChineseDot=TheChineseString[i];
cChineseDot<<=8;
cChineseDot|=TheChineseString[i+1];
HanZiLibrary[2*HanZiCounter+1]=cChineseDot;
HanZiCounter++;
i+=2;
}
}
}
}
//---------------------------------------------------------------------------
int __fastcall TForm1::SearchInHanZiLib(unsigned char HanZiHigh,unsigned char HanZiLow)
{
int ReturnValue=-1;
int i;
unsigned int cChineseChar=0;
cChineseChar=HanZiHigh;
cChineseChar<<=8;
cChineseChar|=HanZiLow;
for(i=0;i<HanZiCounter;)
{
if(cChineseChar==HanZiLibrary[2*i+1])
{
ReturnValue=i;
break;
}
else
{
i++;
}
}
return ReturnValue;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SortTheHanZiLib(void)
{
int i,j,k;
unsigned int cTemp1,cTemp2;
for(i=0;i<HanZiCounter-1;i++)
{
k=i;
for(j=i+1;j<HanZiCounter;j++)
{
if(HanZiLibrary[2*j]>HanZiLibrary[2*k]) k=j;
}
cTemp1=HanZiLibrary[2*k];
cTemp2=HanZiLibrary[2*k+1];
HanZiLibrary[2*k]=HanZiLibrary[2*i];
HanZiLibrary[2*k+1]=HanZiLibrary[2*i+1];
HanZiLibrary[2*i]=cTemp1;
HanZiLibrary[2*i+1]=cTemp2;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateTheHanZiFon(void)
{
int i,k,m,n;
unsigned char TempLattice[32];
unsigned char HanZiCode[2];
unsigned char HanZiLattice[32];
unsigned char cTempChar1,cTempChar2;
long int HZSerialNo;
long int HZByteOffset;
FILE *HanZiFon;
FILE *MyHanZiFontLib;
for(i=0;i<32;i++)
{
TempLattice[i]=0;
}
if((HanZiFon=fopen("hzk16.fon","rb"))==NULL)
{
Application->MessageBox("源字库文件打开错误", "错了", MB_OK);
return;
}
switch(RadioGroup1->ItemIndex)
{
case 0:
if((MyHanZiFontLib=fopen("正向字库.txt","w+t"))==NULL)
{
Application->MessageBox("目的字库建立错误", "错了", MB_OK);
return;
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -