Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.31;
Скачать: CL | DM;

Вниз

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

 
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);
и оформить процедурой.



Страницы: 1 вся ветка

Текущий архив: 2002.01.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
1-100006
jorh
2002-01-15 09:14
2002.01.31
Индекс компонента - это круто


1-99933
veZuk
2002-01-12 12:13
2002.01.31
Запуск программы


1-99948
RRRA
2002-01-11 20:11
2002.01.31
Несколько простых вопросов.


1-99978
Leviathan
2002-01-01 04:27
2002.01.31
Много таймеров


3-99924
EternalWonderer
2001-12-29 09:32
2002.01.31
Проблема с представлением дробных чисел Oracle