Форум: "Начинающим";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];
ВнизСкопировать участки текста до разделителя Найти похожие ветки
← →
Овотог (2009-05-09 15:37) [0]Добрый день. Помогите есть задача скопировать участки текста до разделителя. Скажем есть текст в нем есть макрос-разделитель. Нужно этот текст разбить на части в соответствии с этим разделителем.
← →
Сергей М. © (2009-05-09 15:51) [1]см. TRegExpr
← →
Овотог (2009-05-09 16:15) [2]А что то попроще тесть? Я вот отсюда взял функцию http://www.delphiworld.narod.ru/base/str_sep4.html но что то она не работает
← →
Овотог (2009-05-09 16:22) [3]То есть если в качестве разделителя взять что то типа "#" то нормально работает а если например "{some_word}" то фигня получается
← →
Овотог (2009-05-09 16:22) [4]вот сама функция
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;
← →
Amoeba © (2009-05-09 16:38) [5]Скачай библиотеку 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 17:04) [6]Спасибо конечно за варианты но если честно нет времени качать и устанавливать какие то новые компоненты.
Мне вот не понятно вот есть функция эта Tokenize я взял вставил в текст разделитель например
text2:=Tokenize(text.Text,"{#}"); функция нормально разбила на три части (я два разделителя вставил) а если сделать так
text2:=Tokenize(text.Text,"{new_page}"); то разделяет на 44 части
В чем причина? Что делать?
← →
Овотог (2009-05-09 18:07) [7]что никто не может подсказать?
← →
turbouser © (2009-05-09 18:32) [8]Овотог
TStrings - delimiter +
TStrings - delimetedtext
подойдет?
← →
Овотог (2009-05-09 18:56) [9]turbouser, спасибо а можешь пример привести как это использовать? то есть текст загнать в тестринглист а дальше как?
← →
antonn © (2009-05-09 19:21) [10]т.е. разделить текст на подстроки?
Велосипед от Игоря Шевченко: http://desksoft.ru/index.php?drkb=26&w&id=158&str_path=0|12|24|26
:)
← →
Овотог (2009-05-09 23:20) [11]Антон, спасибо! Работает!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c