Dysponuję Delphi RAD Studio 12 i pracuję z Windows 11.
Moje problemy związane są z kodowaniem i dekodowaniem łańcuchów i plików tekstowych.
W wyniku kodowania obiektu i jego dekodowania do innego obiektu powinienem otrzymać
identyczne pliki/łańcuchy, a tak nie jest. Nie mogę ustalić dlaczego tak się dzieje. Proszę o pomoc.
Obiektem kodowania jest plik direk.txt wygenerowany poprzez komendę dir>direk.txt dla możliwie dużego katalogu. W załączeniu podaję stosowne oprogramowanie.W nazwach plików.należy usunąć rozszerzenia .txt
Marek Detka
unit SezamMD2;
interface
uses
System.SysUtils;
const
CodeKey:array[1..5] of Byte=(2,3,5,7,11);
Function EncodeStr(S:String):String;
(* Zwraca zakodowany ³añcuch S *)
{***************************************************************************}
Function DecodeStr(S:String):String;
(* Zwraca odkodowany ³añcuch S *)
{***************************************************************************}
Procedure EncodeFile(Src,Dest:String);
(* Tworzy zakodowany zbiór Dest *)
{***************************************************************************}
Procedure DecodeFile(Src,Dest:String);
(* Tworzy odkodowany zbior Dest *)
{***************************************************************************}
implementation
{***************************************************************************}
Function EncodeStr(S:String):String;
var
I,J:Word;
Pom:String;
Begin
if S='' then begin
Result:='';
Exit;
end;
Pom:='';
J:=1;
for I:=1 to Length(S) do begin
Pom:=Pom+Chr(Ord(S[I])+CodeKey[J]);
Inc(J);
if J>5 then
J:=1;
end;{of for}
Result:=Pom;
End;{of EncodeStr}
{***************************************************************************}
Function DecodeStr(S:String):String;
var
I,J:Word;
Pom:String;
Begin
if S='' then begin
Result:='';
Exit;
end;
Pom:='';
J:=1;
for I:=1 to Length(S) do begin
Pom:=Pom+Chr(Ord(S[I])-CodeKey[J]);
Inc(J);
if J>5 then
J:=1;
end;
Result:=Pom;
End;{of DecodeStr}
{***************************************************************************}
Procedure EncodeFile(Src,Dest:String);
var
We,Wy:TextFile;
Linia:String;
Begin
if not FileExists(Src) then begin
Writeln('W bie¿¹cym katalogu brak jest zbioru '+Src,'');
Writeln('Nacisnij klawisz ENTER');
Readln;
Writeln('OK');
Sleep(1500);
Exit;
end;
AssignFile(We,Src);
Reset(We);
AssignFile(Wy,Dest);
Rewrite(Wy);
while not Eof(we) do begin
Readln(We,Linia);
if Linia='' then
Writeln(Wy,Linia)
else
Writeln(Wy,EncodeStr(Linia));
end;
CloseFile(We);
CloseFile(Wy);
End;{of CodeFile}
{***************************************************************************}
Procedure DecodeFile(Src,Dest:String);
var
We,Wy:TextFile;
Linia:String;
Begin
if not FileExists(Src) then begin
Writeln('W bie¿¹cym katalogu brak jest zbioru '+Src,'');
Writeln('Nacisnij klawisz ENTER');
Readln;
Writeln('OK');
Sleep(1500);
Exit;
end;
AssignFile(We,Src);
Reset(We);
AssignFile(Wy,Dest);
Rewrite(Wy);
while not Eof(we) do begin
Readln(We,Linia);
Writeln(Wy,DecodeStr(Linia));
end;
CloseFile(We);
CloseFile(Wy);
End;{of DecodeFile}
{***************************************************************************}
END.
(https://4programmers.net/assets/63052/pCJqQN8cK3Q0jsnMnktooUbsHp8ztulKScN19rjU.txt)SezamMD2.pas.txt