delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف استبدل حروف الكلمات بارقام من ملف نصي
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
اكتب برنامج يقوم بتشفير كلمات من ملف حيث يضع بدلا عن الحروف ارقام مطابقة لها
مثلا الحرف أ يقابل الرقم 1 و الحرف ب يقابل الرقم 2 وبالتالي كلمة مثل اب ستظهر 21
المشكلة التي تواجهني هي فتح الملف و المرور علي كلماته حرفا حرفا والباقي يبدو اسهل حيث اقوم بكتابة تعليمة فحص الحرف ووضع الرقم المطابق للحرف

الأمر ابسط مما تتوقع فقط عليك ان توضح اكثر:
مثلا كلمة "دلفي" كيف ستحول
وكيف ستحول الفراغ Space
وكيف ستحول الحروف الخاصة
وماذا عن اللغة ؟ المثال الذي وضعته فوق "اب" باللغة العربية، فهل ستحول اللغة العربية فقط ؟
والسلام عليكم ورحمة الله
اشكرك اخي العزيز علي ردك
كما ذكرت فالفكرة تقوم علي ساس ان كل حرف سوف يقابله رقم وبالتالي اذا كانت الحروف العربية 24 حرفا فانه يقابلها 24 رقما مثلا ا يقبل 1 وب يقابل 2 و ج يقابل 3 و د يقابل 4 و ل يقابل 5 وفاء مثلا تقابل 6 والياء تقابل 10 مثلا يعني كل حرف ابجدي هنالك رقم يمثلة و الفراغات تمثل بفراغات
وبالتالي فان كلمة دلفي مثلا تتحول الي (د=4 ل=5 ف=6 ي=10 اذن دلفي تكون 10654 )
المشكلة كيف امسك الكلمة حرفا حرفا و استبدل حروفها بالارقام المناظرة لها و الفراغات تكون فراغات
اشكرك مجددا

لا يزال الوصف ناقص
فانت تقول يتم استبدال الحروف بارقام من 1 الى 24
فان كان لديك هذا 1221 فكيف تعرف
هل هو 2 22 1
ام هو 21 12
ام هو 1 2 2 1
والسلام عليكم ورحمة الله
يمكنك فصل الأرقام بفواصل
السلام عليكم و رحمة الله

الحل في المرفقات
السلام عليكم ورحمةالله وبركاته
اشكرك اخي مهدي علي الملف المرفق والذي سهل كثيرا مسالتي اما بالنسبة لاستفسار الاخ دلتاازيز فان العدد الذي ذكرت 1221 انت تقصد هل هناك فواصل ام لا وهو سؤال فعلا منطقي فهذا الرقم 1221 يمكن ان يقابل كلمة مثل (اببا) بفرض ان ا=1 ب=2
او ممكن ان يكون كلمة مثل ( ابر ) بفرض ان ا=1 ب=2 ر=12
فعلا مسالة الفواصل مهمة وقد حلاها الاخ مهدي بالمثال المرفق حيث وضع الحروف في مصفوف لها 28 عنصر واستبد الحرف بترقيمه في المصفوفة

يا اخي المثل يقول "فهم السؤال نصف الجواب"
بصيغة اخرى سؤال ناقص بالطرح لايمكن الاجابة عليه
الاخ مهدي اجتهد من عنده واضاف فواصل لكن هذا غير وارد في نص السؤال
والسلام عليكم ورحمة الله
==================================================================


آ c2
أ c3
إ c5
ا c7
ب c8
ة c9
ت ca
ث cb
ج cc
ح cd
خ ce
د cf
ذ d0
ر d1
ز d2
س d3
ش d4
ص d5
ض d6
ط d7
ظ d8
ع d9
غ da
ف e1
ق e2
ك e3
ل e4
م e5
ن e6
ه e7
و e8
ى e9
ي ea
مسافة 20

===============================


كيف اقوم بتنفيذ هذه البرمجيه بحيث اننى اضع المعايير فى ملف خارج البرنامج ويقوم البرنامج بتغيير الحروف

من خلال استناده على الملف المرفق الذى وضعنا به الحروف وما يقابلها
السلام عليكم

الفكرة ان نقوم بانشاء جدول يحتوي على الحرف و ما يقابله من كلمة/ رقم نريد تشفيره
نقوم بتعريف 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
الصفحات : 1 2