რჩევები

როგორ მოვახდინოთ დაყვანილი სიმებიანი სიმების სიაში მოთავსება

როგორ მოვახდინოთ დაყვანილი სიმებიანი სიმების სიაში მოთავსება

ბევრჯერ არის საჭირო, როდესაც სიმები უნდა დაიყოს სტრიქონების მასივში, განცალკევების სახით. მაგალითად, CSV ("მძიმით" გამოყოფილი) ფაილს შეიძლება ჰქონდეს სტრიქონი, როგორიცაა "Zarko; Gajic;; DelphiGuide" და გსურთ, რომ ეს სტრიქონი 4 სტრიქონის (სტრიქონების) მიხედვით იყოს გაყოფილი. ცარიელი სიმებიანი) და "DelphiGuide" იყენებენ ნახევრად კოლონის ხასიათს ";" როგორც დელიმიტერი.

დელფი გთავაზობთ სტრიქონის გასაანალიზებლად რამდენიმე მეთოდს, მაგრამ შეიძლება აღმოაჩენთ, რომ არც ერთი არ აკეთებს ზუსტად იმას, რაც გჭირდებათ. მაგალითად, ExtractStrings RTL მეთოდი ყოველთვის იყენებს ციტირების სიმბოლოებს (ერთჯერადი ან ორმაგი) დელიმიტერებისთვის. კიდევ ერთი მიდგომა გამოიყენოსდელიმიტერი დაDelimitedText TStrings კლასის თვისებები - მაგრამ, სამწუხაროდ, შესრულებაში ხარვეზია (დელფის "შიგნით"), სადაც სივრცის პერსონაჟს ყოველთვის იყენებენ როგორც დელიმიტატორს.

განუსაზღვრელი სიმებიანი მასალის გაანალიზების ერთადერთი გამოსავალი არის საკუთარი თავის დაწერის მეთოდი:

დელიმიტური სტრიქონის მაგალითი

~~~~~~~~~~~~~~~~~~~~~~~~~
პროცედურა ParseDelimited (const sl: TStrings; const მნიშვნელობა: სიმებიანი; const delimiter: სიმებიანი);
var
dx: მთელი რიცხვი;
ns: სიმებიანი;
txt: სიმებიანი;
დელტა: მთელი რიცხვი;
დაიწყოს
დელტა: = სიგრძე (დელიმიტერი);
txt: = მნიშვნელობა + დელიმიტერი;
sl.BeginUpdate;
sl.Clear;
სცადე
ხოლო სიგრძე (txt)> 0 გააკეთეთ
დაიწყოს
dx: = Pos (დელიმიტერი, txt);
ns: = კოპირება (txt, 0, dx-1);
sl.Add (ns);
txt: = კოპირება (txt, dx + დელტა, MaxInt);
დასასრული;
ბოლოს
sl.EndUpdate;
დასასრული;
დასასრული;
~~~~~~~~~~~~~~~~~~~~~~~~~

გამოყენება (ავსებს Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide', ';')