مقارنة أحرف البدل DELPHI
المؤلف: البريد الإلكتروني Li Junyu: [email protected] أو [email protected] أو [email protected]
من المعروف أن DELPHI لديها وظائف أقوى من VB، لكنها في بعض الأحيان ليست مريحة مثل VB في بعض التفاصيل الصغيرة. على سبيل المثال، يوجد SENDKEY() في VB، والذي يمكنه محاكاة مفاتيح لوحة المفاتيح بسهولة، ولكنه أكثر تعقيدًا في DELPHI. مثال آخر هو وجود LIKE في VB لتنفيذ أحرف البدل بسهولة قارن ذلك، ولكن لا يمكنني العثور عليه في DELPHI لهذا السبب، عندما أكون في حالة حرة وما زلت في حالة مزاجية، أقوم بإنشاء وظيفة مخصصة لتحقيق هذه الوظيفة، فقط في حالة عدم وجود مزاج للقيام بذلك. مثل هذا الشيء الصغير مرة أخرى في حالات الطوارئ، هذا النوع من البرامج الصغيرة لا فائدة منه على الرف.
تضيف خوارزمية البرنامج أولاً "؟" إلى نهاية السلسلة الفرعية. *'، ثم اقرأ السلسلة الفرعية، وابحث عن الأحرف بين أحرف البدل في السلسلة الفرعية، أي السلسلة الفرعية في السلسلة الفرعية، ثم ابحث في السلسلة المصدر لمعرفة ما إذا كانت تحتوي على السلسلة الفرعية في السلسلة الفرعية، ولكنها كذلك لا يزال من الصعب جدا تنفيذه.
الوظيفة هيABClikeAX(abc,ax:string):boolean; //abc هي السلسلة المصدر، والفأس هي السلسلة الفرعية
فار
abcstart,axstart,abclength,axlength:integer;
endpartabc,endpartax,subax:string;
درجة الحرارة، ABCwww، axwww:integer؛
ابدأ //aaa
درجة الحرارة:=0;
abcstart:=1;
axstart:=1;
axwww:=1;
abcwww:=1;
abclength:=length(abc);
طول المحور:=طول(فأس);
isabclikeax:=true;
بينما axstart<=axlength يفعل
تبدأ //بب
إذا كان الفأس [axstart] = '؟'
يبدأ
المؤتمر الوطني العراقي(axstart);
المؤتمر الوطني العراقي(abcstart);
إذا abcstart> abclength ثم
يبدأ
isabclikeax:=false;
استراحة؛
نهاية؛
يكمل؛
نهاية؛
إذا كان ax[axstart]='*' إذن
يبدأ
المؤتمر الوطني العراقي(axstart);
درجة الحرارة:=1;
axwww:=axstart;
abcwww:=abcstart;
يكمل؛
نهاية؛
إذا لم يكن الأمر كذلك(ax[axstart] in ['?','*'] ) إذن
تبدأ // سي سي سي
endpartax:=copy(ax,axstart,axlength-axstart+1)+'?*';
subax:=copy(endpartax,1,min(pos('?',endpartax),pos('*',endpartax))-1);
axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
endpartabc:=copy(abc,abcstart,abclength-abcstart+1);
إذا ((pos(subax,endpartabc)<>0) و (temp=1 )) أو ((pos(subax,endpartabc)=1) و (temp=0)) ثم
ابدأ //ddd
إذا درجة الحرارة = 1 ثم درجة الحرارة: = 0؛
abcstart:=abcstart+(pos(subax,endpartabc)+length(subax)-1);
// axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
النهاية //ddd
آخر //ddd
ابدأ //ddd
إذا درجة الحرارة = 0 ثم
يبدأ
axstart:=axwww;
abcwww:=abcwww+1;
abcstart:=abcwww;
درجة الحرارة:=1;
يكمل؛
نهاية؛
isabclikeax:=false;
استراحة؛
النهاية؛
النهاية;//ccc
النهاية؛//بب
النهاية؛//aaa
الدالة تشبه (abc,ax:string):boolean;
يبدأ
islike:=isABClikeAX(abc,ax);
نهاية؛
الدالة Widecard(abc,ax:string):boolean;
يبدأ
Widecard:=isABClikeAX(abc,ax);
نهاية؛
انتبه إلى USES MATH، نظرًا لاستخدام MIN()، يمكنك أيضًا استخدام عبارة IF لاستبدال MIN()، ولكنها ليست واضحة بدرجة كافية.