delphi4arab منتديات دلفي للعرب
[تمرين] استخراج حجم String بدون استعمال الدالة Length - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : تمارين دلفي وحلول (https://delphi4arab.net/forum/forumdisplay.php?fid=16)
+--- الموضوع : [تمرين] استخراج حجم String بدون استعمال الدالة Length (/showthread.php?tid=3896)

الصفحات: 1 2 3 4


[تمرين] استخراج حجم String بدون استعمال الدالة Length - hanipino - 20-02-2012

[FONT="Arial Black"]الســــــــــلام عليكـــــــــم

اكتب كود بالدالفى لاستراج حجم [FONT="Fixedsys"]String بدون الاستعانة بالدالة [FONT="Comic Sans MS"]Length

بالتــــــــــــــــــــــــــوفيق .


[تمرين] استخراج حجم String بدون استعمال الدالة Length - kachwahed - 20-02-2012

وعليكم السلام ورحمة الله وبركاته
جرب بداية SizeOf مع توجيه IFDEF UNICODE يقسم الناتج على اثنين، فأعطتني حجم المؤشر Sad 4 byte
هذه باستخدام VCL وأحداث ويندوز WM_GETTEXTLENGTH...
PHP كود :
function GetStrLength(S: string): Integer;
var
  
c: TControl;
begin
  c 
:= TControl.Create(nil);
  
c.SetTextBuf(pChar(S));
  
Result := c.GetTextLen;
  
c.Free;
end; 
لكن لم أجربها على iOS فما تتوقع؟
شكرا على التمرين Smile



[تمرين] استخراج حجم String بدون استعمال الدالة Length - hanipino - 20-02-2012

نعم SizeOf تعطى حجم المتغير و ليس حجم القيمة التى يحتويها المتغير .
كود :
لكن لم أجربها على iOS فما تتوقع؟
مثلك اخى kachwahed لم اجربها .


- بالنسبة لطريقتك :
تعطى نتيجة صحيحة لاكنها كبيرة جدا سواء بالدالفى او بالاسمبلى (Disassembly)

يوجد ما احسن منها مثلا لا يتعدى كودها نصف سطر بالدالفى و حوالى 4 اوامر بالاسمبلى . Smile

شكرا لك اخى kachwahed .

------------------------------
التمرين مفتوح لمحاولات اخرى .


[تمرين] استخراج حجم String بدون استعمال الدالة Length - TF6M - 20-02-2012

السلام عليكم Smile
PHP كود :
Function GetStringLength (TrgStr: String): Byte;
{
$IF CompilerVersion >= 17}Inline;{$IFEND}
Var
 
PL: PCHAR;
Begin
 PL 
:= Pointer(TrgStr);
 {
$IFDEF Unicode}
  
Dec(PL,2);
 {
$ELSE}
  
Dec(PL,4);
 {
$ENDIF}
 
Result:=Byte(PL^);
End; 

بالتوفيق,,


[تمرين] استخراج حجم String بدون استعمال الدالة Length - hanipino - 20-02-2012

وعليكم السلام

اخى TF6M محاولة جيدة لكنها ناقصة ... لماذا ?
ماذا لو كان حجم String اكبر من ان يخزن فى 1 بايت فقط (اى حجمه اكبر من ان يخزن فى بايت فقط)
الدالة تقراء بايت واحد فقط من المكان الصحيح بالرغم من انك ذهبت للمكان الصحيح عن طريق طرح 4 بايت الا انك قراءت 1 فقط Smile .


[تمرين] استخراج حجم String بدون استعمال الدالة Length - TF6M - 20-02-2012

hanipino كتب :وعليكم السلام

ماذا لو كان حجم String اكبر من ان يخزن فى 1 بايت فقط (اى حجمه اكبر من ان يخزن فى بايت فقط)
1- أولا طول القيمة النصية و ليس حجم لأن هناك فرق .
2- الطول المدروس بين 256 محرف و 65535 لاحظ التويجه IFDEF UNICODE
3-"
بالرغم من انك ذهبت للمكان الصحيحSmile" هنا
4- "الا انك قراءت 1 فقط" حسب الحاجة byte / word .... فقط للتقليل من حجم الداكرة المخصص
بارك الله فيك + في إنتطار البقية بالتوفيق,,


[تمرين] استخراج حجم String بدون استعمال الدالة Length - hanipino - 20-02-2012

كود :
2- الطول المدروس بين 256 محرف و 65535 لاحظ التويجه IFDEF UNICODE

لم افهمك انا استعمل دالفى 2007 دائما شرط UNICODE غير محقق و حتى ان تحقق فان المتغير PL سياخد عنوان قبل السلسلة النصية ب 2 بايت و ان لم يتحقق سياخد عنوان قبل السلسلة النصية ب 4 بايت

والنتيجة دائما قرائة 1 بايت من عنوان المتغير PL ... ???


كود :
حسب الحاجة byte / word .... فقط للتقليل من حجم الداكرة المخصص

كيف ذالك حسب الحاجة الدالة مخصصة للاتيان ب طول السلسة النصية و قيمة هذه الاخيرة يخزن فى 4 بايت ... كيف تقراء حسب الحاجة byte / word ... (لا بل DWORD او INTEGER ... )

مثلا طول سلسلة نصية 130000 محرف هل الدالة تعيد النتيجة صحيحة .


[تمرين] استخراج حجم String بدون استعمال الدالة Length - kachwahed - 20-02-2012

أثناء أحد المحاولات الفاشلة حصلت على هذه Smile
[صورة: attachment.php?attachmentid=3264&stc=1&d=1329774158]
ثم تمكنت منها في سطرين... بالغش Smile



[تمرين] استخراج حجم String بدون استعمال الدالة Length - virtual - 21-02-2012

لماذا طرحت 2 من المؤشر pl
هل في هذا العنوان يخزن طول السلسلة ؟


[تمرين] استخراج حجم String بدون استعمال الدالة Length - لؤي - 21-02-2012

السلام عليكم

تفضل محاولتي:

كود :
procedure TForm1.Button1Click(Sender: TObject); var L: ShortString; begin L := 'delphi4arab delphi4arab delphi4arab delphi4arab'; ShowMessage(IntToStr([color=Red]Ord(L[0][/color]))); end;