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

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

انظر الصورة

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

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

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


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم