![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скопировать участки текста до разделителя
Овотог © (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