السلام عليكم
الفكرة ان نقوم بانشاء جدول يحتوي على الحرف و ما يقابله من كلمة/ رقم نريد تشفيره
نقوم بتعريف record يحتوي على حقلين الحرف/ الكلمة و الحرف الكلمة التي سنستبدلها..
كود :
TCrypt = record
Alpha: string;
Crypt: string;
end;
بعدها نقوم بانشاء مصفوفة غير محددة الابعاد من السجل array of record و بالتالي يكون لدينا جدول التشفير الخاص بنا array تكون غير محدودة الابعاد نحدد ابعادها اثناء زمن التشغيل ...
كود :
private
CryptTable: array of TCrypt;
صورة توضيحية
كود :
http://imgur.com/RYZsm
الآن كل ما علينا القيام به هو ملئ الجدول الخاص بنا من الملف النصي
ملاحظة مهمة الكود للتوضيح و هناك طرق افضل المهم ان تصل الفكرة....
كود :
procedure TForm1.CreateCryptTable;
var
StringList: TStringList;
I: Integer;
begin
StringList := TStringList.Create;
try
StringList.LoadFromFile('c:\Data.txt');
SetLength(CryptTable, StringList.Count);
for I := 0 to StringList.Count -1 do
begin
CryptTable[i].Alpha := Copy(StringList[i], 1, Pos(' ', StringList[i]) - 1);
CryptTable[i].Crypt := Copy(StringList[i], Pos(' ', StringList[i]) + 1, Length(StringList[i]));
end;
finally
StringList.Free;
end;
end;
البحث و الاستبدال و اككر هناك طرق افضل والكود غير مرتب كما ينبغي لكن شغال 100/100
كود :
procedure TForm1.Button1Click(Sender: TObject);
var
StringList: TStringList;
i: Integer;
TmpStr: string;
begin
CreateCryptTable;
StringList := TStringList.Create;
try
StringList.Assign(Memo1.Lines);
for I := 0 to StringList.Count - 1 do
begin
TmpStr := StringList[i];
ReplaceStr(TmpStr);
StringList[i] := TmpStr;
Memo2.Lines.Add(StringList[i]);
end;
finally
StringList.Free;
end;
end;
procedure TForm1.ReplaceStr(var Str: string);
var
i: Integer;
x: Integer;
begin
for I := Length(Str) downto 1 do
begin
for x := 0 to Length(CryptTable) - 1 do
begin
if Str[I] = CryptTable[x].Alpha then
Str := StringReplace(Str, Str[i], CryptTable[x].Crypt, []);
end;
end;
end;
S.FATEH