Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];




Вниз

Подскажите как решить эту задачу с вытаскиванием из строки куска текста. 


Dmitriy_R   (2002-01-08 14:40) [0]

Вот к примеру имеем
Var Buffer: PChar;
a,b,c,d,e: string;
begin
Buffer := Char("12345:67890:abcde:fghiy:");

мне надо получить следующие результаты
a = 12345, b = 67890, c = abcde, d = fghiy.
Тоесть мне надо брать данные с начала до двоеточия,
от первого двоеточия и до второго, и так далее...



Agent Smith   (2002-01-08 14:50) [1]

Ответ писать неохота, поетому привожу фрагмент кода моей проги по запихиванию в массив данных из Edit"a(от пробела до пробела);
Вроде это та прога, за работаспособность не отвечаю...procedure TForm1.Button1Click(Sender: TObject);
const
SIZE=5;
label
bye;
var
a:array[1..SIZE]of string[5];
i,p:integer;
st:string;
begin
st:=Edit1.text;
for i:=1 to SIZE do
begin
repeat
p:=pos(" ",st);
if p=1
then delete(st,1,1);
until p<>1;
p:=pos(" ",st);
if p>1 then
begin
a[i]:=copy(st,1,p-1);
delete(st,1,p);
end else
begin
a[i]:=st;
delete(st,1,Length(st));
end;
if a[i]="" then
begin
MessageDlg("Введите все элементы массива!",
mtError,[mbOk],0);
Edit1.Text:="";
goto bye;
end;
end;
st:="";
for i:=1 to SIZE do
begin
st:=st+IntToStr(i)+". "+a[i]+#13;
end;
ShowMessage(st);
bye:
end;



Юрий Зотов   (2002-01-08 14:58) [2]

S - исходная строка.

with TstringList.Create do
try
Text := StringReplace(S, ":", #13#10, rfReplaceAll);
A := Strings[0];
B := Strings[1];
C := Strings[2];
D := Strings[3];
E := Strings[4]
finally
Free
end;



Romkin   (2002-01-08 14:59) [3]

varString := string(Buffer);
varStringList.Text := stringreplace(varString,":",#13#10,[rfReplaceAll]);
и теперь получили список строк, каждая переменная - в своей строке...



Romkin   (2002-01-08 14:59) [4]

Опередили...



SergVlad   (2002-01-08 15:19) [5]

Разбор строки для универсальности лучше делать в TStrings
По аналогии можно сделать и для ch: CharSet

procedure ParseText_(Lines : TStrings; const S : String; const ch: char);
var
x : Integer;
Temp : String;
begin
Lines.Clear;
if (S <> sNULL) then
begin
Temp := sNULL;
for x := 1 to Length(S) do
begin
if (S[x] = ch) then
begin
Lines.Add(Trim(Temp));
Temp := sNULL;
end
else
Temp := Temp + S[x];
end;
if (Temp <> sNULL) then Lines.Add(Trim(Temp));
end;
end; {ParseText_}




Dimka Maslov   (2002-01-08 15:24) [6]

procedure ExtractStrings(Str: TString; List: TStrings; Separator: Char);
var
P1, P2: PChar;
begin
List.BeginUpdate;
try
List.Clear;
P1:=PChar(Str);
repeat
P2:=StrScan(P1, Separator);
if P2<>nil then P2^:=#0;
List.Add(P1);
P1:=P2;
Inc(P1);
until P2 = nil;
finally
List.EndUpdate;
end;
end;



Alx2   (2002-01-08 16:07) [7]

Раз уж извращаться, то вот еще вариант (естественно, не универсальный, но примеру удовлетворяет):

Var
S :String;
k, start, idx : integer;
strs : array [1..4] of string;
begin
S := "12345:67890:abcde:fghiy:"; // С этим работаем и его же "портим"
start := 1;
idx := 1;
for k := 1 to Length(S) do
begin
if S[k]=":" then
begin
S[k]:=#0;
strs[Start] := Pchar(@S[idx]);
idx := k+1;
inc(start);
end;
end;
Label1.Caption := Strs[1]+", "+Strs[2]+", "+Strs[3]+", "+Strs[4];
end;



Nicolas_   (2002-01-14 17:28) [8]

RxLib, модуль StrUtils, функция ExtractWord.



Light Elf   (2002-01-14 20:24) [9]

Сотворил бы кто нормальный аналог для Perl-функции split.
Передаем ей строку, строку-разделитель и ссылку на array of strings. И последний потом заполняем.



Alx2   (2002-01-15 08:19) [10]

>Light Elf © (14.01.02 20:24
см. ответ от Юрий Зотов © (08.01.02 14:58)
Только немного поправить строчку
Text := StringReplace(S, ":", #13#10, rfReplaceAll);
и оформить процедурой.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.029 c
14-100063         panov                 2001-12-11 15:37  2002.01.31  
Угадайте, очем речь?


14-100053         Arhelon               2001-12-10 08:29  2002.01.31  
Помогите плз с Аьской (ActiveList)


1-100008          Gilbert               2002-01-14 08:44  2002.01.31  
Компонент Label который показывает системное время


1-99958           Romul                 2002-01-12 14:28  2002.01.31  
Как удерживать бегунок у ScrollBar внизу?


1-99954           Yuraz                 2002-01-13 19:03  2002.01.31  
Помогите! Не могу разобраться, почему в этой проц. печатается менее 6 букв