السلام عليكم ورحمة الله
عيدكم مبارك سعيد
جيت في وقت غير مناسب الناس مشغوله
اخواني الكرام لقد قطعت اشواط كثيرة نحو التعلم لغة دلفي والا هناك عقبة ستغير مستواي ...
والان احتاج من ينير دربي فما اقدر وحدي افهم الاكواد وانا ما عندي حد يساعدني لهذا جت عندكم
ما اطول عليكم يا اخوان
function explode(const separator, s: string; limit: Integer = 0): TDynStringArray;
var SepLen: Integer;
F, P: PChar;
begin
SetLength(Result, 0);
if (S = '') or (Limit < 0) then
Exit;
if Separator = '' then
begin
SetLength(Result, 1);
Result[0] := S;
Exit;
end;
SepLen := Length(Separator);
P := PChar(S);
while P^ <> #0 do
begin
F := P;
P := AnsiStrPos(P, PChar(Separator));
if (P = nil) or ((Limit > 0) and (Length(Result) = Limit - 1)) then
P := StrEnd(F);
SetLength(Result, Length(Result) + 1);
SetString(Result[High(Result)], F, P - F);
F := P;
while (P^ <> #0) and (P - F < SepLen) do
Inc(P);
end;
end;
ذه الدالة لتقسيم سلسلة نصية ووضعا في مصفوفة ويستم تقسيمها بواسطة seperator
(شرح للمبتدئين اذا اهمهم الامر )
مثلا seperator عن رمز | فاذا السلسلة هكذا " Proud| to| be| muslim "
سيتم تقسيمها الى
proud
to
be
muslim
========
SetLength تحدد حجم الاحرف صح ؟ هل result السلسلة النصية كامل بدون تقسيم ؟ وجعلنا حجمها 0 ؟
بعدها قلنا اذا s فارغ (لا يحتوي على اي شيئ) و limit (عدد عناصر المصفوفة) اصغر من 0
اخرج من الدالة .. (او من IF فقط ؟)
ثم قلنا اذا seperator لا يتحوي على شيئ
نجعل السلسلة النصية حجمها 1 يعني يكون فيها حرف واحد صح ؟
Result[0] := S; لم افهم اي شيئ
خروج .
SepLen := Length(Separator);
seplen يحتوي على حجم seperator يعني راح يكون 1
عندنا متغير P من نوع pchar
نقلنا محتوى s لى P لتحويله الى Null terminated string
وقلنا عندما P^ لا تكون فارغة
انقل محتوى P الى F
ثم P := AnsiStrPos(P, PChar(Separator));
P سيحتوي على ؟؟؟
AnsiStrPos ستحتوي على او حرف ومعه باقي السلسلة !!! لماذا هناك P نفسه ؟
الكود اعلاه هوا لتصحيح هل معلوماتي صح ام لا وذالط كله عرفته لوحدي وتعبت من البحث لهذا طلبت مساعدتك
ولم استطع فهم الباقي
هذا هوا
if (P = nil) or ((Limit > 0) and (Length(Result) = Limit - 1)) then
P := StrEnd(F);
SetLength(Result, Length(Result) + 1);
SetString(Result[High(Result)], F, P - F);
F := P;
while (P^ <> #0) and (P - F < SepLen) do
Inc(P);
end;
end;
ارجوا ان تفهموني
لا اطلب ان تضيع وقتك وتساعدني دفعة وحده يمكنك اخي الكريم ان ترد علي كل ما تكون فاضي وتفهمني جزئ بجزء
بارك الله فيكم