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

نسخة كاملة : ما الخطا في هذا الكود
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم
الكود
كود :
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
لكن لم انجح اين الخطا في الكود بارك الله فيكم
والسلام عليكم
وعليكم السلام
هكذا
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
جزاك الله كل خير لم تخطر في بالي ان المشكلة هنا لانه كان يطبع لي رقم 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 يحمل اكثر من قيم فما السبب بارك الله فيك مع انه في كل حلقة المفروض انه يضيف حرف
أولا ليكون في علمك أن الكود الذي وضعته في أول مشاركة
يعمل بدون اي مشاكل في دلفي 7
عدى تعديل هذا سطل for c in b do
أما في النسخ التي تدعم اليونيكود لا يعمل بالشكل المطلوب
----------------
والسبب هو أن Compiler سيعتبر string
WideString
لذا توجب استعمال AnsiString مقابل string لتجنب تفلسف Compiler
----------------
أما بخصوص أنه عرض محرف واحد
لأن القيمة التي يحملها البايت الثاني هي '#0' وهي null terminated نهاية السلسلة.
(31-03-2017, 01:02 AM)Agmcz كتب : [ -> ]أولا ليكون في علمك أن الكود الذي وضعته في أول مشاركة
يعمل بدون اي مشاكل في دلفي 7
عدى تعديل هذا سطل for c in b do
أما في النسخ التي تدعم اليونيكود لا يعمل بالشكل المطلوب
----------------
والسبب هو أن Compiler سيعتبر string
WideString
لذا توجب استعمال AnsiString مقابل string لتجنب تفلسف Compiler
----------------
أما بخصوص أنه عرض محرف واحد
لأن القيمة التي يحملها البايت الثاني هي '#0' وهي null terminated نهاية السلسلة.

السلام عليكم بارك الله فيك اخي وزادك الله علما
هل يمكن عمل لوب على السترنغ الموجود ووضعه في array بدون استخدام move يصبح تقريبا على الشكل التالي
c:char;
for c in mystring do
begin
myaray[c]:=mystring[c];
end;
هكذا
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; 
السلام عليكم
بارك الله فيك اخي لكن لما وضعت هذا b[I-1] هل بسبب ان السترنغ يبدا من 1 ام هناك سبب اخر
وعليكم السلام
نعم السبب أن string أول محرف يبدأ من الواحد والحلقة تبدأ من الواحد
لذا تقوم بطرح واحد من القيمة التي يحملها العداد لأن المصفوفة تبدأ من الصفر لتكون عملية النقل منتظمة
أما بخصوص الكود فاستعمال Move أو Loop أو...
في الاخير النتيجة تكون واحدة يبقى الأداء كم يستغرق هذا الكود من وكل يستغرق الاخر.
يعطيك العافية اخي لكن والله شيء يحيرني اريد ان اجد له تفسير الكود عند تتبع الكتابة على المصفوفة debug لا ينقلها كما هي اما عند ارجاعها الى مصفوفة نصية تعمل عادي ما السبب هل يتم تحويلها ام ماذا

انظر الصورة

https://d.top4top.net/p_455jyqt61.jpg

كل رقم يضيف عليه 48 من اين جاءت وهل يجب ان اطرح من كل حرف 48

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