delphi4arab منتديات دلفي للعرب
ما الخطا في هذا الكود - نسخة قابلة للطباعة

+- 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
  ثم ارسلت  مصفوفة النصوص ابتداء من المحرف الاول الى نهاية السلسلة الى مصفوفة البايتات ثم اردت ارجاعها الى مصفوفة نصوص ووضعها في memo
لكن لم انجح اين الخطا في الكود بارك الله فيكم
والسلام عليكم


RE: ما الخطا في هذا الكود - Agmcz - 30-03-2017

وعليكم السلام
هكذا
PHP كود :
const
 
 s = AnsiString('1,2,3,4,5,6,7,8,9,10,11,12,13');
procedure TForm1.Button1Click(Sender: TObject);
var
 
 b: array of Byte;
 
 t: AnsiString;
 
 c: Byte;
 
 g: Ansichar;
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; 
أنت تواجه دائما في نفس المشاكل Ansi, Unicode
يمكن العمل بنسخ دلفي التي لا تدعم اليونيكود
مثلا دلفي 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;
tConfusedtring;
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 كتب : أولا ليكون في علمك أن الكود الذي وضعته في أول مشاركة
يعمل بدون اي مشاكل في دلفي 7
عدى تعديل هذا سطل for c in b do
أما في النسخ التي تدعم اليونيكود لا يعمل بالشكل المطلوب
----------------
والسبب هو أن Compiler سيعتبر string
WideString
لذا توجب استعمال AnsiString مقابل string لتجنب تفلسف Compiler
----------------
أما بخصوص أنه عرض محرف واحد
لأن القيمة التي يحملها البايت الثاني هي '#0' وهي null terminated نهاية السلسلة.

السلام عليكم بارك الله فيك اخي وزادك الله علما


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 كود :
const
 
 s = '12345678910111213';

procedure TForm1.Button1Click(Sender: TObject);
var
 
 b: array of Byte;
 
 i: Integer;
 
 t: string;
 
 c: Byte;
begin
  SetLength
(b, Length(s));
 
 for I := 1 to Length(s) do
 
   b[I-1]:= Ord(s[I]);
 
 for c in b do
 
   t := t + char(c);
 
 Memo1.Lines.Add(t);
end; 



RE: ما الخطا في هذا الكود - 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

تمام حليت المشكلة الحمد لله رب العالمين جزاك الله كل خير على صبرك معي