هناك عدة مرات عندما تحتاج إلى تقسيم خيط في مجموعة مصفوفة من السلاسل باستخدام حرف كفاصل. على سبيل المثال ، قد يحتوي ملف CSV (مفصول بفاصلة ") على سطر مثل" Zarko؛ Gajic ؛؛ DelphiGuide "وتريد أن يتم تحليل هذا الخط إلى 4 أسطر (سلاسل)" Zarko "و" Gajic "و" (سلسلة فارغة) و "DelphiGuide" باستخدام حرف منقوطة "؛" كمحدد.
تقدم دلفي عدة طرق لتحليل سلسلة ، ولكن قد تجد أنه لا أحد يفعل بالضبط ما تحتاجه. على سبيل المثال ، يستخدم أسلوب ExtractStrings RTL دائمًا علامات الاقتباس (مفردة أو مزدوجة) للمحدِّدات. نهج آخر هو استخداممحدد ونص محدد خصائص فئة TStrings — ولكن لسوء الحظ ، هناك خطأ في التنفيذ ("داخل" دلفي) حيث يتم دائمًا استخدام حرف المسافة كمحدد.
~~~~~~~~~~~~~~~~~~~~~~~~~
الإجراء ParseDelimited (sl sl: TStrings؛ قيمة ثابتة: string؛ محدد محدد: string)؛
فار
dx: عدد صحيح ؛
نانوثانية: سلسلة ؛
txt: string؛
دلتا: عدد صحيح ؛
ابدأ
دلتا: = الطول (محدد) ؛
txt: = value + delimiter؛
sl. بدء التحديث ؛
sl. واضح؛
محاولة
بينما الطول (txt)> 0 يفعل
ابدأ
dx: = Pos (محدد ، txt) ؛
ns: = Copy (txt، 0، dx-1) ؛
sl. تضاف (نانوثانية) ؛
txt: = Copy (txt، dx + delta، MaxInt) ؛
النهاية؛
أخيرا
sl. التحديث.
النهاية؛
النهاية؛
~~~~~~~~~~~~~~~~~~~~~~~~~
الاستخدام (يملأ Memo1):
ParseDelimited (Memo1.lines، 'Zarko؛ Gajic ؛؛ DelphiGuide '،'؛ ')