![]() |
|
ما الخطا في هذا الكود - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : ما الخطا في هذا الكود (/showthread.php?tid=8552) الصفحات:
1
2
|
ما الخطا في هذا الكود - mohamed49 - 30-03-2017 السلام عليكم الكود كود : const s=('1,2,3,4,5,6,7,8,9,10,11,12,13');
procedure TForm1.Button1Click(Sender: TObject);
var b:array of byte;
t:string;
c: byte;
g:char;
begin
SetLength(b,length(s));
move(s[1],b,length(s));
for c in b do
begin
t:=t+chr(c);
end;
memo1.Lines.Add(t);
end;
اردت وضع مصفوفة نصوص في مصفوفة بايتات اعطيت مصفوفة البايتات نفس الحجم باستخدام setlengthلكن لم انجح اين الخطا في الكود بارك الله فيكم والسلام عليكم RE: ما الخطا في هذا الكود - Agmcz - 30-03-2017 وعليكم السلام هكذا PHP كود : constيمكن العمل بنسخ دلفي التي لا تدعم اليونيكود مثلا دلفي 7 RE: ما الخطا في هذا الكود - mohamed49 - 30-03-2017 جزاك الله كل خير لم تخطر في بالي ان المشكلة هنا لانه كان يطبع لي رقم 1 فقط const s=string('1,2,3,4,5,6,7,8,9,10,11,12,13'); procedure TForm1.Button1Click(Sender: TObject); var b:array of byte; t tring;c: byte; begin SetLength(b,length(s)); move(s[1],b[0],length(s)); for c in b do begin t:=t+chr(c); end; memo1.Lines.Add(t); end مع العلم ان string يحمل اكثر من قيم فما السبب بارك الله فيك مع انه في كل حلقة المفروض انه يضيف حرف RE: ما الخطا في هذا الكود - Agmcz - 31-03-2017 أولا ليكون في علمك أن الكود الذي وضعته في أول مشاركة يعمل بدون اي مشاكل في دلفي 7 عدى تعديل هذا سطل for c in b do أما في النسخ التي تدعم اليونيكود لا يعمل بالشكل المطلوب ---------------- والسبب هو أن Compiler سيعتبر string WideString لذا توجب استعمال AnsiString مقابل string لتجنب تفلسف Compiler ---------------- أما بخصوص أنه عرض محرف واحد لأن القيمة التي يحملها البايت الثاني هي '#0' وهي null terminated نهاية السلسلة. RE: ما الخطا في هذا الكود - mohamed49 - 31-03-2017 (31-03-2017, 01:02 AM)Agmcz كتب : أولا ليكون في علمك أن الكود الذي وضعته في أول مشاركة السلام عليكم بارك الله فيك اخي وزادك الله علما RE: ما الخطا في هذا الكود - mohamed49 - 31-03-2017 هل يمكن عمل لوب على السترنغ الموجود ووضعه في array بدون استخدام move يصبح تقريبا على الشكل التالي c:char; for c in mystring do begin myaray[c]:=mystring[c]; end; RE: ما الخطا في هذا الكود - Agmcz - 31-03-2017 هكذا PHP كود : constRE: ما الخطا في هذا الكود - mohamed49 - 31-03-2017 السلام عليكم بارك الله فيك اخي لكن لما وضعت هذا b[I-1] هل بسبب ان السترنغ يبدا من 1 ام هناك سبب اخر RE: ما الخطا في هذا الكود - Agmcz - 31-03-2017 وعليكم السلام نعم السبب أن string أول محرف يبدأ من الواحد والحلقة تبدأ من الواحد لذا تقوم بطرح واحد من القيمة التي يحملها العداد لأن المصفوفة تبدأ من الصفر لتكون عملية النقل منتظمة أما بخصوص الكود فاستعمال Move أو Loop أو... في الاخير النتيجة تكون واحدة يبقى الأداء كم يستغرق هذا الكود من وكل يستغرق الاخر. RE: ما الخطا في هذا الكود - mohamed49 - 31-03-2017 يعطيك العافية اخي لكن والله شيء يحيرني اريد ان اجد له تفسير الكود عند تتبع الكتابة على المصفوفة debug لا ينقلها كما هي اما عند ارجاعها الى مصفوفة نصية تعمل عادي ما السبب هل يتم تحويلها ام ماذا انظر الصورة https://d.top4top.net/p_455jyqt61.jpg كل رقم يضيف عليه 48 من اين جاءت وهل يجب ان اطرح من كل حرف 48 تمام حليت المشكلة الحمد لله رب العالمين جزاك الله كل خير على صبرك معي |