การเปรียบเทียบไวด์การ์ดของ DELPHI
ผู้แต่ง: Li Junyu อีเมล: [email protected] หรือ [email protected] หรือ [email protected]
เป็นที่ยอมรับกันว่า DELPHI มีฟังก์ชันที่แข็งแกร่งกว่า VB แต่บางครั้งก็ไม่สะดวกเท่ากับ VB ในบางเรื่องเล็กๆ น้อยๆ ตัวอย่างเช่น มี SENDKEY() ใน VB ซึ่งสามารถจำลองแป้นคีย์บอร์ดได้อย่างง่ายดาย แต่ใน DELPHI นั้นซับซ้อนกว่า อีกตัวอย่างหนึ่งคือ มี LIKE ใน VB เพื่อให้สามารถใช้งานไวด์การ์ดได้อย่างง่ายดาย เปรียบเทียบ แต่ฉันไม่พบมันใน DELPHI ด้วยเหตุนี้ เมื่อฉันอยู่ในสถานะอิสระและยังมีอารมณ์อยู่ ฉันจึงสร้างฟังก์ชันแบบกำหนดเองขึ้นมาเพื่อใช้ฟังก์ชันนี้ เผื่อว่าฉันไม่อยู่ในอารมณ์ที่จะทำ สิ่งเล็กๆ น้อยๆ แบบนี้อีกครั้งในกรณีฉุกเฉิน โปรแกรมเล็กๆ แบบนี้ไม่มีประโยชน์อะไรบนหิ้ง
อัลกอริธึมของโปรแกรมจะเพิ่ม '?' ต่อท้ายสตริงย่อย *' จากนั้นอ่านสตริงย่อย ค้นหาอักขระระหว่างอักขระตัวแทนในสตริงย่อย นั่นคือ สตริงย่อยในสตริงย่อย จากนั้นค้นหาในสตริงต้นทางเพื่อดูว่ามีสตริงย่อยในสตริงย่อยหรือไม่ ยังคงเป็นเรื่องยากมากที่จะปฏิบัติ
ฟังก์ชั่น isABClikeAX(abc,ax:string):boolean; //abc คือสตริงต้นทาง, ax คือสตริงย่อย
var
abcstart,axstart,abclength,axlength:จำนวนเต็ม;
endpartabc, endpartax, subax:สตริง;
อุณหภูมิ, abcwww, axwww: จำนวนเต็ม;
เริ่ม//อ๊าาา
อุณหภูมิ:=0;
abcstart:=1;
แอคสตาร์ท:=1;
อ๊ากกก:=1;
abcwww:=1;
ความยาว abc:=ความยาว(abc);
ความยาวแกน:=ความยาว(ขวาน);
isabclikeax:=จริง;
ในขณะที่ axstart<=axlength ทำ
เริ่ม//bbb
ถ้า ax[axstart]='?' แล้ว
เริ่ม
Inc(axstart);
Inc(abcstart);
ถ้า abcstart> abclength แล้ว
เริ่ม
isabclikeax:=เท็จ;
หยุดพัก;
จบ;
ดำเนินการต่อ;
จบ;
ถ้า ax[axstart]='*' แล้ว
เริ่ม
Inc(axstart);
อุณหภูมิ:=1;
axwww:=axstart;
abcwww:=abcstart;
ดำเนินการต่อ;
จบ;
ถ้าไม่(ax[axstart] ใน ['?','*'] ) แล้ว
เริ่ม//ccc
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;
ส่วนท้าย:=copy(abc,abcstart,abclength-abcstart+1);
ถ้า ((pos(subax,endpartabc)<>0) และ (temp=1 )) หรือ ((pos(subax,endpartabc)=1) และ (temp=0)) แล้ว
เริ่ม //dd
ถ้า temp=1 แล้ว temp:=0;
abcstart:=abcstart+(pos(subax,endpartabc)+ความยาว(subax)-1) ;
// axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
จบ//dd
อย่างอื่น //dd
เริ่ม //dd
ถ้า temp=0 แล้ว
เริ่ม
axstart:=axwww;
abcwww:=abcwww+1;
abcstart:=abcwww;
อุณหภูมิ:=1;
ดำเนินการต่อ;
จบ;
isabclikeax:=เท็จ;
หยุดพัก;
จบ; //dd
จบ;//ccc
จบ;//bbb
จบ;//อร๊าย
ฟังก์ชั่นเป็นเหมือน (abc, ขวาน: สตริง): บูลีน;
เริ่ม
islike:=isABClikeAX(abc,ขวาน);
จบ;
ฟังก์ชันไวด์การ์ด (abc, ขวาน: สตริง): บูลีน;
เริ่ม
ไวด์การ์ด:=isABClikeAX(abc,ขวาน);
จบ;
โปรดใส่ใจกับ USES MATH เนื่องจากมีการใช้ MIN() คุณจึงสามารถใช้คำสั่ง IF เพื่อแทนที่ MIN() ได้ แต่ก็ยังไม่ชัดเจนเพียงพอ