![]() |
|
#1
|
|||
|
|||
![]() Здравствуте
Как можно обработать строку вида: comand_name: var1 var2 var3 где var любые значения (слова). Нужно получить var1..3 в отдельных переменых или массиве |
#2
|
||||
|
||||
![]() Цитата:
Код:
var x:string; \\x это var1 a:integer; begin x:='comand_name: var1 var2 var3'; delete(x,1,13); a:=pos(' ',x); delete(x,a+1,length(x)-a+1); showmessage(x); end; Делай все остальное по этому же принципу... ![]() |
#3
|
||||
|
||||
![]() Даю тебе свою функция по разделению строки на строки типа TStringList, её я написал ещё когда был зелен в делфи, можнт она не самая быстрая, но зато работает:
Код:
function ADsplitString(s:String;p:String;d:Char):TStringList; //s - сама строка которую надо разделить //p - что разделяет слова //d - группирование строк, например если p=| а d=" то если в кавычках a|b|c|"d|e|h"... есть | то они будут игнорироватся var i: Integer; t: Boolean; ss: String; c: String; procedure DelQuotMarks(var Str: String); begin if(AnsiStartsText(d,Str))then Str := AnsiMidStr(Str, 2, MAXLONG); if(AnsiEndsText(d, Str))then Str := AnsiMidStr(Str, 1, length(Str)-1); end; begin ss := s; Result := TStringList.Create; t := false; //c := s[1]; for i:=1 to length(ss)do begin //s[i] if(t)and(ss[i]=d)then begin t := false; //заканчивается группирование //c := c + ss[i]; end else if(ss[i]=d)then t := true; //начинается if(p=' ')then begin //SPACE + TAB if not(t)and(ss[i]=p)or(ss[i]=#9)then begin if(c='')or(c=d)or(c=d+d)then else Result.Add(c); c := ''; end else c := c + ss[i]; end else begin //OTHER if not(t)and(ss[i]=p)then begin if(c='')or(c=d)or(c=d+d)then else Result.Add(c); c := ''; end else c := c + ss[i]; end; if(i=length(ss))then Result.Add(c); end; for i:=0 to Result.Count-1 do begin ss := Result[i]; DelQuotMarks(ss); Result[i] := ss; end; end; TAleD = class(TUser) public function HelpMe(ASubject, ARequest: String): String; function GiveMeExample(ASubject: String): TStringList; procedure WriteReview(APost: Integer; ADescription: TStringList); end; |