المشاركات : 169
المواضيع 28
:
: 391
الإنتساب : Apr 2016
السلام عليكم
الكود
كود : 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
لكن لم انجح اين الخطا في الكود بارك الله فيكم
والسلام عليكم
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
وعليكم السلام
هكذا
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 على المشاركة المفيدة1 user says Thank You to Agmcz for this post
• mohamed49
المشاركات : 169
المواضيع 28
:
: 391
الإنتساب : Apr 2016
جزاك الله كل خير لم تخطر في بالي ان المشكلة هنا لانه كان يطبع لي رقم 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 يحمل اكثر من قيم فما السبب بارك الله فيك مع انه في كل حلقة المفروض انه يضيف حرف
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
أولا ليكون في علمك أن الكود الذي وضعته في أول مشاركة
يعمل بدون اي مشاكل في دلفي 7
عدى تعديل هذا سطل for c in b do
أما في النسخ التي تدعم اليونيكود لا يعمل بالشكل المطلوب
----------------
والسبب هو أن Compiler سيعتبر string
WideString
لذا توجب استعمال AnsiString مقابل string لتجنب تفلسف Compiler
----------------
أما بخصوص أنه عرض محرف واحد
لأن القيمة التي يحملها البايت الثاني هي '#0' وهي null terminated نهاية السلسلة.
سبحان الله وبحمده سبحان الله العظيم
كل من 1 user says قال شكرا ل Agmcz على المشاركة المفيدة1 user says Thank You to Agmcz for this post
• mohamed49
المشاركات : 169
المواضيع 28
:
: 391
الإنتساب : Apr 2016
(31-03-2017, 01:02 AM)Agmcz كتب : أولا ليكون في علمك أن الكود الذي وضعته في أول مشاركة
يعمل بدون اي مشاكل في دلفي 7
عدى تعديل هذا سطل for c in b do
أما في النسخ التي تدعم اليونيكود لا يعمل بالشكل المطلوب
----------------
والسبب هو أن Compiler سيعتبر string
WideString
لذا توجب استعمال AnsiString مقابل string لتجنب تفلسف Compiler
----------------
أما بخصوص أنه عرض محرف واحد
لأن القيمة التي يحملها البايت الثاني هي '#0' وهي null terminated نهاية السلسلة.
السلام عليكم بارك الله فيك اخي وزادك الله علما
المشاركات : 169
المواضيع 28
:
: 391
الإنتساب : Apr 2016
هل يمكن عمل لوب على السترنغ الموجود ووضعه في array بدون استخدام move يصبح تقريبا على الشكل التالي
c:char;
for c in mystring do
begin
myaray[c]:=mystring[c];
end;
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
هكذا
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 على المشاركة المفيدة1 user says Thank You to Agmcz for this post
• mohamed49
المشاركات : 169
المواضيع 28
:
: 391
الإنتساب : Apr 2016
السلام عليكم
بارك الله فيك اخي لكن لما وضعت هذا b[I-1] هل بسبب ان السترنغ يبدا من 1 ام هناك سبب اخر
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
وعليكم السلام
نعم السبب أن string أول محرف يبدأ من الواحد والحلقة تبدأ من الواحد
لذا تقوم بطرح واحد من القيمة التي يحملها العداد لأن المصفوفة تبدأ من الصفر لتكون عملية النقل منتظمة
أما بخصوص الكود فاستعمال Move أو Loop أو...
في الاخير النتيجة تكون واحدة يبقى الأداء كم يستغرق هذا الكود من وكل يستغرق الاخر.
سبحان الله وبحمده سبحان الله العظيم
كل من 1 user says قال شكرا ل Agmcz على المشاركة المفيدة1 user says Thank You to Agmcz for this post
• mohamed49
المشاركات : 169
المواضيع 28
:
: 391
الإنتساب : Apr 2016
31-03-2017, 06:38 PM
(آخر تعديل لهذه المشاركة: 31-03-2017, 06:56 PM بواسطة mohamed49.)
يعطيك العافية اخي لكن والله شيء يحيرني اريد ان اجد له تفسير الكود عند تتبع الكتابة على المصفوفة debug لا ينقلها كما هي اما عند ارجاعها الى مصفوفة نصية تعمل عادي ما السبب هل يتم تحويلها ام ماذا
انظر الصورة
https://d.top4top.net/p_455jyqt61.jpg
كل رقم يضيف عليه 48 من اين جاءت وهل يجب ان اطرح من كل حرف 48
تمام حليت المشكلة الحمد لله رب العالمين جزاك الله كل خير على صبرك معي
|