Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа со строками [D5, Win2k]


ghg ©   (2002-08-01 08:02:00) 

Есть строка следующего формата:
"243 3423 23423 fgergr"
И мне надо вытащить каждое из чисел и строку в отдельные переменные.
Вопрос: как это наиболее просто сделать? А то все мысли как это реализовать получаются довольно громоздкие, хотя видимо должно быть довольно просто.
Заранее благодарен.


lak_b   (2002-08-03 00:58:00) [1]

элементарно!
просто юзайте _язык_ и все...

...буря в стакане воды...


987   (2002-08-02 22:19:00) [2]

А есть в Дельфи ещё такой класс - TParser - очень крутой - может и числа выбирать, и символы.


987   (2002-08-02 22:18:00) [3]

А есть в Дельфи ещё такой класс - TPerser - очень крутой - может и числа выбирать, и символы.


ghg   (2002-08-02 07:59:00) [4]

Проблема решена с помощью Commatext, но поняного примера в хелпе я не нашел, поэтому на то чтобы понять как с ним работать потратил минут 40.

Всем спасибо.


kva   (2002-08-01 17:54:00) [5]

По поводу StringReplace есть непроверенное мной сообщение
(источник неизвестен):
Q>I"ve noticed a problem when you try to use StringReplace on a string which contains NULL (#0) characters (not null terminated).
A>There is an undocumented bug in the StringReplace function. It appears that it does not handle strings with NULL (#0) characters in them. Here is a better routine which handles NULL correctly.

function customStringReplace(OriginalString, Pattern, Replace: string): string;
{-----------------------------------------------------------------------------
Procedure: customStringReplace
Date: 07-Feb-2002
Arguments: OriginalString, Pattern, Replace: string
Result: string

Description:
Replaces Pattern with Replace in string OriginalString. Taking into account NULL (#0) characters.

I cheated. This is ripped almost directly from Borland"s StringReplace Function. The bug creeps in with the ANSIPos function. (Which does not detect #0 characters)
-----------------------------------------------------------------------------}
var
SearchStr, Patt, NewStr: string;
Offset: Integer;
begin
Result := "";
SearchStr := OriginalString;
Patt := Pattern;
NewStr := OriginalString;
while SearchStr <> "" do
begin
Offset := Pos(Patt, SearchStr); // Was AnsiPos
if Offset = 0 then
begin
Result := Result + NewStr;
Break;
end;
Result := Result + Copy(NewStr, 1, Offset - 1) + Replace;
NewStr := Copy(NewStr, Offset + Length(Pattern), MaxInt);
SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
end;
end;


Leran2002   (2002-08-01 10:23:00) [6]

> MBo © (01.08.02 10:12)

Спасибо!!! Классная функция, бля как я ее раньше то не заметил ;-))... Еще раз СПАСИБО!!!
MyList.Text:=StringReplace(S," ",#13#10,[rfReplaceAll]);


MBo   (2002-08-01 10:12:00) [7]

>Leran2002
Зачем это все???

Кстати, аналог MyGetList в Delphi есть - StringReplace


Григорий Ситнин   (2002-08-01 10:10:00) [8]

Во! Вспомнил!

GHG, есть еще замечательная функция ExtractStrings()- тоже рекомендую посмотреть.


Leran2002   (2002-08-01 10:03:00) [9]

Держи может пойдет:

function MyGetList(Separator,S:string):string;
var
i:integer;
begin
Result:=S;
i:=Pos(Separator,Result);
while i<>0 do
begin
Delete(Result,i,Length(Separator));
Insert(#13#10,Result,i);
i:=Pos(Separator,Result);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
MyList:TStringList;
begin
S:=Edit1.Text;
MyList:=TStringList.Create;
MyList.Text:=MyGetList(" ",S);

Memo1.Lines.Assign(MyList);

MyList.Free;
end;


Григорий Ситнин   (2002-08-01 09:34:00) [10]


> Юрий Зотов © (01.08.02 09:24)


Юра, попробуйте gregor@mtc.ru(блок адресов нашего провайдера попал в неофициальный спам-лист, который почему-то многие используют. С тех пор - почта к нам не от всех ходит).


Anatoly Podgoretsky   (2002-08-01 09:29:00) [11]

ghg © (01.08.02 08:10)
Не все, кроме функций, у классов могут быть еще и свойства, это такая подлая штука, выглядит как переменная, а на самом деле может быть чем угодно, даже фикцией.


Юрий Зотов   (2002-08-01 09:24:00) [12]

> Григорий Ситнин © (01.08.02 09:13)

Попытался, но сервер не распознает Ваш адрес. Проверьте, пожалуйста.


Григорий Ситнин   (2002-08-01 09:13:00) [13]

2 МБо:
Ох, сведет меня с ума пакет RationalSuite %). А еще в отпуске был... последний раз Дельфи полтора месяца назад запускал - и, вот, результат. Простейшего не помню.

2 Юрий Зотов:
Юра, не могли бы вы мне написать письмо по электронной почте? Нужно приватно побеседовать, а вашего адреса не знаю.


MBo   (2002-08-01 09:11:00) [14]

>Григорий Ситнин
CommaText умеет обрабатывать пробелы, запятые и кавычки. Пример есть в хелпе.


Григорий Ситнин   (2002-08-01 09:03:00) [15]

MБо, Юра, извиняюсь: а CommaText разве поинмает пробелы? Я полагал, что он понимает значения, разделенный знаком ";" (вроде бы он называется "comma"...

Или я с утра дурацкий? =)


Юрий Зотов   (2002-08-01 08:15:00) [16]

Как же так? В справке все есть: TStrings, properties, CommaText.


ghg   (2002-08-01 08:10:00) [17]

ОТкуда знаете? Я вроде в хелпе смотрел все что про строки и стринглисты а такй функции не видел.
Или я слепой или не все места знаю?


MBo   (2002-08-01 08:03:00) [18]

stringlist.commatext:=s;
теперь stringlist[0] - "243" и т.д.


Наверх

Титульная страница Поиск, карта сайта Написать письмо