สตริงใน Delphi
—— excerpt จากอินเทอร์เน็ต
1: สตริงต่าง ๆ
สตริงเป็นประเภทข้อมูลที่มีประโยชน์มากที่สุดใน ObjectPascal ฟังก์ชั่นมากมายผ่านข้อโต้แย้งที่มีสตริง เนื่องจากมีหลายวิธีในการกำหนดและใช้สตริงใน Delphi รวมถึงสตริงทั่วไป (สตริง) ใน Pascal สายยาวที่สนับสนุนโดย Delphi (Ansistrings) ตัวละครอาร์เรย์คล้ายกับภาษา C (Arrayofchar) และชี้ไปที่ตัวชี้ตัวละคร (PCHAR) เป็นต้น บทความต่อไปนี้จะพูดคุยเกี่ยวกับความแตกต่างและข้อควรระวังของประเภทเหล่านี้ในคำจำกัดความและแอปพลิเคชัน
1. สายปาสกาลแบบดั้งเดิม
ใน Pascal สตริงทั่วไปคือลำดับของอักขระที่มีความยาวแน่นอน แต่ละสตริงมีความยาวชุด (ค่าเริ่มต้นคือ 255) และต่อไปนี้เป็นตัวอย่าง:
วาจา
ที่อยู่: สตริง;
รหัส: สตริง [50];
ที่อยู่คือสตริงที่มีความยาว 255 และความยาวสูงสุดของรหัสคือ 50
ความยาวของสตริง Pascal แบบดั้งเดิมไม่เกิน 255
คุณสามารถใช้การดำเนินการแบบต่อเนื่องของสตริง "+" เพื่อเชื่อมต่อสตริงเข้าด้วยกัน:
ผลลัพธ์: = String1+String2;
2. สายยาวใน Delphi
นอกเหนือจากการสนับสนุนสายสั้นปาสกาลแบบดั้งเดิม Delphi ยังรองรับสายยาว อักขระยาวเรียกว่า Ansistring สตริงยาวจัดสรรหน่วยความจำแบบไดนามิกนั่นคือหน่วยความจำที่จำเป็นสำหรับสตริงจะถูกจัดสรรเฉพาะเมื่อใช้สตริงดังนั้นความยาวของพวกเขาจึงไม่ จำกัด ใน Delphi หากคุณใช้ String1: String เป็นคำอธิบายประเภท String1 อาจเป็นสตริงสั้นหรือสตริงยาวขึ้นอยู่กับการตั้งค่าของสวิตช์ $ H ในคอมไพเลอร์ ค่าเริ่มต้นคือ $ H+ซึ่งแสดงถึงสตริงยาว ANSI สายยาวจบลงด้วย NULL ซึ่งหมายความว่าสายยาวนั้นเข้ากันได้อย่างสมบูรณ์กับสตริง Null-end ในภาษา C
ความยาวสูงสุดของสตริงสามารถตั้งค่าผ่านฟังก์ชัน setLength:
SetLength (String1,100); ใช้ฟังก์ชั่น Trimleft, Trimright และ Trim เพื่อกำจัดพื้นที่ว่างเปล่าที่จุดเริ่มต้นสิ้นสุดและสิ้นสุดของสตริงตามลำดับ
3. อาร์เรย์ตัวละครคล้ายกับ C
อาร์เรย์ที่เริ่มต้นด้วย 0 สามารถใช้ในการจัดเก็บสตริงที่ลงท้ายด้วย null คำจำกัดความต่อไปนี้:
วาจา
ชื่อ: อาร์เรย์ [0..50] OFCHAR;
4. ตัวชี้ pchar
หากการตั้งค่า exendedSyntax ใน Delphi (ค่าเริ่มต้น) อาร์เรย์อักขระที่เริ่มต้นด้วย 0 เข้ากันได้อย่างสมบูรณ์กับตัวชี้ pchar ที่ชี้ไปที่ตัวละครเนื่องจากชื่ออาร์เรย์อักขระเริ่มต้นด้วย 0 คือตัวชี้ที่ชี้ไปที่อักขระตัวแรกของอาร์เรย์อักขระตัวละคร . คุณสามารถชำระเงินสตริงโดยตรงไปยังตัวชี้ pchar ตัวอย่างเช่น:
วาจา
P: Pchar;
เริ่ม
P: = 'HelloWorld';
จบ;
วิธีนี้ p ชี้ไปที่ชิ้นส่วนของหน่วยความจำที่เก็บสตริง 'helloWorld' และจบลงด้วย NULL
ฟังก์ชั่น API โปรแกรมแอปพลิเคชัน Windows Application จำนวนมากต้องการประเภท PCHAR เป็นพารามิเตอร์ เมื่อใช้ตัวชี้ pchar ก่อนอื่นใช้ฟังก์ชั่น getMem (varp: pointer; ขนาด: จำนวนเต็ม) เพื่อใช้สำหรับการจัดสรรหน่วยความจำ ปล่อยหน่วยความจำ ตัวอย่างเช่น:
Varwindir, Sysdir: pchar;
เริ่ม
getMem (Windir, 256); {จัดสรรหน่วยความจำสำหรับพอยน์เตอร์}
GetWindowsDirectory (Windir, 128); {วางไดเรกทอรีการติดตั้ง Windows ให้กับ Windir}
ShowMessage ('WindowsDirectoryis'+Windir); {แสดงผลลัพธ์}
จบ;
สอง: การแปลงสตริง
ข้างต้นแนะนำคำจำกัดความและการใช้สตริงสี่ประเภทใน Delphi เนื่องจากฟังก์ชั่นต่าง ๆ มีข้อกำหนดที่แตกต่างกันสำหรับประเภทพารามิเตอร์สตริงจึงจำเป็นต้องมีการแปลงประเภทสตริง
1. คุณสามารถใช้ STRPAs เพื่อแปลงสตริงที่ลงท้ายด้วย null เป็นสตริงสั้น Pascal StrpCopy เสร็จสิ้นการแปลงตรงข้าม
2. เนื่องจากสายยาวจบลงด้วย NULL คุณสามารถแปลงสายยาวเป็นประเภท pchar ด้วยการหล่อ การใช้งานคือ: pchar (s) s เป็นสายยาว การหล่อส่งคืนตัวชี้ไปยังอักขระตัวแรกของสตริงยาวและสตริงแหลมจะจบลงด้วย null ตัวอย่างเช่น:
วาจา
คำบรรยายภาพข้อความ: สตริง;
คำบรรยายภาพ: = 'HelloWorld!';
mssage: = 'thisisatestoflongstring';
MessageBox (0, pchar (ข้อความ), pchar (คำบรรยาย), mb_ok);
สรุป: เมื่อใช้สตริงใน Delphi คุณต้องชัดเจนเกี่ยวกับประเภทของสตริงเพื่อหลีกเลี่ยงความสับสน เมื่อเข้าใจสตริงคุณควรเชื่อมโยงสตริงกับพอยน์เตอร์และการจัดสรรหน่วยความจำเพื่อเพิ่มความเข้าใจ