Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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);
и оформить процедурой.



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

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

Наверх





Память: 0.46 MB
Время: 0.011 c
1-99980
Georg
2002-01-14 15:22
2002.01.31
Номер недели


3-99856
Dush
2001-12-25 17:17
2002.01.31
QuickReport


1-99950
dim2001
2002-01-13 20:28
2002.01.31
Запись в файл


14-100050
Orest
2001-12-05 22:28
2002.01.31
GifAnimator, ОЧЕНЬ НУЖНО!!!!!!!!!!!!!!!!!!!


3-99873
EternalWonderer
2001-12-26 15:21
2002.01.31
Вставка данных в поле LONG в ORACLE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский