procedure TfrmPrincipal.Executar;
var
i: integer;
sr: TSearchRec;
local, line, nameD, rankD, typeD, dnaD, dnaparentD: string;
sl1: TStringList;
bds1: TMemDataSet;
txt: TextFile;
begin
local := ExtractFilePath(Application.ExeName) + 'dnas\';
if SetCurrentDir(local) then
begin
memo1.lines.Clear;
if FindFirst('*.txt', faAnyFile, sr) = 0 then
begin
sl1 := TStringList.Create;
bds1 := TMemDataSet.Create(self);
bds1.FieldDefs.Add('NAME', ftString, 50);
bds1.FieldDefs.Add('RANK', ftString, 10);
bds1.FieldDefs.Add('TYPE', ftString, 3);
bds1.FieldDefs.Add('DNA', ftString, 2);
bds1.FieldDefs.Add('DNA_PARENT', ftString, 1);
bds1.CreateTable;
bds1.Open;
repeat
memo1.lines.Add('Buscando arquivo ' + sr.Name);
sl1.Add(sr.Name);
SendMessage(memo1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
until FindNext(sr) <> 0;
for i := 0 to sl1.count - 1 do
begin
memo1.lines.Add('Lendo o arquivo ' + sl1[i]);
SendMessage(memo1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
AssignFile(txt, sl1[i]);
Reset(txt);
while not eof(txt) do
begin
readln(txt, line);
nameD := Copy(line, 0, pos('mon', line) + 2);
rankD := Copy(ExtractFileNameWithoutExt(sl1[i]), 9, 1);
case rankD[1] of
'r': rankD := '0';
'c': rankD := '1';
'u': rankD := '2';
'm': rankD := '3';
end;
typeD := Copy(ExtractFileNameWithoutExt(sl1[i]), 5, 3);
case typeD[3] of
'c': typeD := 'A';
't': typeD := 'D';
'r': typeD := 'I';
end;
dnaD := iif(rankD = 'mega', '??', iif(rankD = 'rook', Copy(line, pos('mon', line) + 4, 2), Copy(line, pos('mon', line) + 6, 2)));
dnaparentD := iif(rankD = 'rook', '?', Copy(line, pos('mon', line) + 4, 1));
bds1.Append;
bds1.FieldByName('NAME').AsString := nameD;
bds1.FieldByName('RANK').AsString := rankD;
bds1.FieldByName('TYPE').AsString := typeD;
bds1.FieldByName('DNA').AsString := dnaD;
bds1.FieldByName('DNA_PARENT').AsString := dnaparentD;
bds1.Post;
end;
end;
if not bds1.IsEmpty then
begin
memo1.lines.Add('');
memo1.lines.Add('Criando o arquivo resultante ' + local + 'dnas_dw2');
SendMessage(memo1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
local := local + 'dnas_dw2.bds';
if FileExists(local) then
DeleteFile(pChar(local));
bds1.SaveToFile(local);
BufDataset1.LoadFromFile(local);
end
else ShowMessage('ERRO: Nenhum dado encontrado.');
FreeAndNil(sl1);
FreeAndNil(bds1);
end;
end
else begin
ShowMessage('ERRO: Pasta não encontrada' + #13#10 + 'Caminho: ' + local);
Application.Terminate;
end;
end;