📄 mapmanage.pas
字号:
unit mapmanage;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, typevalue;
// featruestr:array [1..8,1..8] of integer=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
type
NumCharPattern = record
Num: integer;
FeatureDetail: array[0..20,1..8,1..8] of integer;
// Number,Total:integer;
end;
FindNumber = record
Numb:integer;
order: array[0..20] of integer;
end;
type
TFeatrue = class
private
Featruetype: array [0..19,0..63] of integer;
class function GetSubStr(var aString:String;SepChar:String):String;
class function GetSubStrNum(aString:String;SepChar:String):integer;
public
class procedure savetofile(FileName: string);
class procedure Openfile();
class function MapCmp():double;
end;
var
featruestr:array [1..8,1..8] of integer;
implementation
uses main;
class procedure Tfeatrue.savetofile(FileName: string);
var
n,i,j,k,m:integer;
SepChar:String;
f:TextFile;
pathstring:string;
begin
if RecogForm.SaveDialog1.Execute then
pathstring:=ExtractFilePath(Application.ExeName)+'feature\pattern.txt';
assignfile(f,'pattern.txt');
RecogForm.savedialog1.Filter:='*.txt|*.txt';
begin
assignfile(f,'pattern.txt');
rewrite(f);
SepChar:=' ';
for m := 0 to 9 do
if pattern[m].Num=0 then
begin
writeln(f,inttostr(m));
writeln(f,inttostr(0));
end
else
if pattern[m].Num<>0 then
begin
writeln(f,inttostr(m));
writeln(f,inttostr(pattern[m].Num));
for k:=1 to pattern[m].Num do
begin
writeln(f,inttostr(pattern[m].FeatureDetail[k][1,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][1,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][1,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][1,8]),SepChar);
writeln(f,inttostr(pattern[m].FeatureDetail[k][2,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][2,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][2,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][2,8]),SepChar);
writeln(f,inttostr(pattern[m].FeatureDetail[k][3,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][3,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][3,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][3,8]),SepChar);
writeln(f,inttostr(pattern[m].FeatureDetail[k][4,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][4,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][4,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][4,8]),SepChar);
writeln(f,inttostr(pattern[m].FeatureDetail[k][5,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][5,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][5,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][5,8]),SepChar);
writeln(f,inttostr(pattern[m].FeatureDetail[k][6,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][6,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][6,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][6,8]),SepChar);
writeln(f,inttostr(pattern[m].FeatureDetail[k][7,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][7,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][7,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][7,8]),SepChar);
writeln(f,inttostr(pattern[m].FeatureDetail[k][8,1]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,2]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,3])
,SepChar,inttostr(pattern[m].FeatureDetail[k][8,4]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,5]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,6])
,SepChar,inttostr(pattern[m].FeatureDetail[k][8,7]),SepChar,inttostr(pattern[m].FeatureDetail[k][8,8]),SepChar);
end;
end;
CloseFile(f);
end;
end;
class procedure Tfeatrue.Openfile();
var
i,j,m,n,amout,t,k,resultFeature:Integer;
Number,Total,FeatrueCode:integer;
MyLine,sNumber,sTotal,sFeatrueCode,SepChar: string;
item: array [1..8] of string;
f:TextFile;
count_s, count_d, ok: integer;
CmpResult,RecResult:double;
begin
//if RecogForm.OpenDialog1.Execute then
Try
begin
//if RecogForm.OpenDialog1.Execute then
begin
{$I-}
pathstring:=ExtractFilePath(Application.ExeName)+'\feature\pattern.txt';
AssignFile(f,pathstring);
Reset(f);
SepChar:=' ';
RecResult:=10000;
while not Eof(f)do
begin
ReadLn(f,sNumber);
Number:=strtoint(sNumber);
ReadLn(f,sTotal);
Total:=strtoint(sTotal);
if Total <> 0 then
begin
pattern[Number].num:=Total;
for n:=1 to Total do // 特征值的总数
begin
for i:=1 to 8 do
begin //8行特征
ReadLn(f,sFeatrueCode);
MyLine:=sFeatrueCode;
Amout:=GetSubStrNum(Myline,SepChar);
begin
for t:=1 to Amout do //每一行的字符数
item[t]:=GetSubStr(MyLine,SepChar); //分开的字符数组
end;
for j:= 1 to 8 do
pattern[Number].FeatureDetail[n][i][j]:=strtoint(item[j]);
end;
end;
end;
end;
end;
end;
// resultFeature:= pattern[Number].FeatureDetail[total][i][j];
{$I+}
CloseFile(f);
Finally
end;
end;
//end;
class function TFeatrue.GetSubStr(var aString:String;SepChar:String):String;
var
Mystr:String;
StrLen:Integer;
SepCharPos:Integer;
begin
StrLen:=Length(aString);
SepCharPos:=Pos(SepChar,aString); //计算分割符在子串中的位置
MyStr:=Copy(aString,1,SepCharPos-1); //将分割符前所有字符放到mystr串中
Delete(aString,1,SepCharPos); //除去分割符和分割符前的子串
GetSubStr:=MyStr; //返回一个字段
end;
class function TFeatrue.GetSubStrNum(aString:String;SepChar:String):integer;
var
i:Integer;
StrLen:Integer;
Num:Integer;
begin
StrLen:=Length(aString);
Num:=0;
For i:=1 to StrLen do
If Copy(aString,i,1) = SepChar then
Num:=Num+1;
result:=Num;
end;
class function TFeatrue.MapCmp():double;
var
i,j,m,n,amout,t,k:Integer;
Number,Total,FeatrueCode:integer;
NumberAsSame,max,ReconFinalNumber,ReconFinalNumberIndex:integer;
recgNumber:array [0..9] of FindNumber;
begin
ReconFinalNumber:=-1;
ReconFinalNumberIndex:=-1;
max:=0;
for number:=0 to 9 do
begin
if pattern[Number].num <> 0 then
begin
for k:=1 to pattern[Number].num do
begin
NumberAsSame:=0;
for i := 1 to 8 do
for j := 1 to 8 do
begin
if (pattern[Number].FeatureDetail[k][i][j]=Feight[j][i])
then
begin NumberAsSame:=NumberAsSame+1; end;
end;
if max<NumberAsSame then
begin
max:=NumberAsSame; ReconFinalNumber:=Number;
ReconFinalNumberIndex:=k;
end;
end;
end;
end;
RecogForm.NumberResultEdit.Text:= inttostr(ReconFinalNumber);
RecogForm.NumberIndexResultEdit.Text:= inttostr(ReconFinalNumberIndex);
RecogForm.NumberLabel.Caption:=IntToStr(ReconFinalNumber);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -