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

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

Скопировать участки текста до разделителя


Овотог ©   (2009-05-09 15:37:00) 

Добрый день. Помогите есть задача скопировать участки текста до разделителя. Скажем есть текст в нем есть макрос-разделитель. Нужно этот текст разбить на части в соответствии с этим разделителем.


Овотог   (2009-05-09 23:20:00) [1]

Антон, спасибо! Работает!


antonn   (2009-05-09 19:21:00) [2]

т.е. разделить текст на подстроки?
Велосипед от Игоря Шевченко: http://desksoft.ru/index.php?drkb=26&w&id=158&str_path=0|12|24|26
:)


Овотог   (2009-05-09 18:56:00) [3]

turbouser, спасибо а можешь пример привести как это использовать? то есть текст загнать в тестринглист а дальше как?


turbouser   (2009-05-09 18:32:00) [4]

Овотог
TStrings - delimiter +
TStrings - delimetedtext
подойдет?


Овотог   (2009-05-09 18:07:00) [5]

что никто не может подсказать?


Овотог   (2009-05-09 17:04:00) [6]

Спасибо конечно за варианты но если честно нет времени качать и устанавливать какие то новые компоненты.

Мне вот не понятно вот есть функция эта Tokenize я взял вставил в текст разделитель например

text2:=Tokenize(text.Text,'{#}'); функция нормально разбила на три части (я два разделителя вставил) а если сделать так
text2:=Tokenize(text.Text,'{new_page}'); то разделяет на 44 части

В чем причина? Что делать?


Amoeba   (2009-05-09 16:38:00) [7]

Скачай библиотеку QStrings (бесплатно, в исходниках).
http://www.torry.net/vcl/vcltools/text/adqstrings.zip

function Q_StrTok1(var S: string; const Delimiters: string): string; overload;

{ Q_StrTok1 возвращает очередной фрагмент строки S, одновременно удаляя его
 из исходной строки и удаляя следующий за ним символ-разделитель. Q_StrTok1
 рассматривает строку S как последовательность из нуля или более текстовых
 фрагментов, отделенных друг от друга единичным символом-разделителем из
 строки Delimiters. Если в строке S подряд идет несколько разделителей, то
 функция будет возвращать пустую строку для каждого такого символа, если
 перед ним отсутствует текстовый фрагмент. В параметре Delimiters передается
 строка, которая состоит из символов, которые рассматриваются как разделители
 для строки S. Сами разделители не включаются во фрагмент, возвращаемый
 функцией Q_StrTok1. Если Delimiters - пустая строке, используются символы,
 которые были заданы в ходе предыдущего вызова одной из следующих функций:
 Q_StrTok, Q_StrSpn, Q_StrCSpn, Q_ProperCase, Q_WordAtPos, Q_SetDelimiters,
 Q_GetWordN, Q_ProperCaseInPlace, Q_CountOfWords. Если разделители передаются
 в виде множества, они не запоминаются для последующих вызовов функций. }


Овотог   (2009-05-09 16:22:00) [8]

То есть если в качестве разделителя взять что то типа '#' то нормально работает а если например '{some_word}' то фигня получается


Овотог   (2009-05-09 16:22:00) [9]

вот сама функция

function Tokenize(Str: WideString; Delimiter: string): TStringList;
var
 tmpStrList: TStringList;
 tmpString, tmpVal: WideString;
 DelimPos: LongInt;
begin
 tmpStrList := TStringList.Create;
 TmpString := Str;
 DelimPos := 1;
 while DelimPos > 0 do
 begin
   DelimPos := LastDelimiter(Delimiter, TmpString);
   tmpVal := Copy(TmpString, DelimPos + 1, Length(TmpString));
   if tmpVal <> '' then
     tmpStrList.Add(UpperCase(tmpVal));
   Delete(TmpString, DelimPos, Length(TmpString));
 end;
 Tokenize := tmpStrList;
end;
Пример использования:

function TForm1.GetDirNames(FullPath: string): TStringList;
begin
 GetDirNames := Tokenize(FullPath, '\');
end;


Овотог   (2009-05-09 16:15:00) [10]

А что то попроще тесть? Я вот отсюда взял функцию http://www.delphiworld.narod.ru/base/str_sep4.htmlно что то она не работает


Сергей М.   (2009-05-09 15:51:00) [11]

см. TRegExpr


Наверх

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