Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизРазделение строки на подстроки Найти похожие ветки
← →
Smog (2004-04-29 19:08) [0]Имеется переменная типа string следуещего содержания:
Имя форума|1082215269|3
2|3|+++|++++++|0|123|1082215167|123
2|2|Test|Test2|4|123|1075740841|123
2|1|1|1|4|123|1075740412|123
надо ее разделить на массив, каждый из элементов которого будет в себе содержать Имя форума|1082215269|3,2|2|Test|Test2|4|123|1075740841|123, 2|2|Test|Test2|4|123|1075740841|123 и так далее
Как это осуществить?
Заранее спасибо
← →
Mihey © (2004-04-29 19:19) [1]const Separators = " ""-,.!?:;"()[]{}"; // Рабиватели (ставь своё)
// Тип для запоминания, можно заменить на String
type TWord = record
Pos: Integer;
Str: String;
end;
type TWords = array of TWord;
procedure Premake(Text: AnsiString);
var i: Integer;
StrLen: Integer;
Wor: String;
Position: Integer;
begin
ClearWords(Words);
Text := AnsiLowerCase(Text);
Position := 1;
StrLen := Length(Text);
for i := 1 to StrLen do
begin
If (Pos(Text[i], Separators) = 0) then
begin
If Wor = "" then Position := i;
Wor := Wor + Text[i];
If i = StrLen then
AddWord(Words, Position, Wor);
end
else
begin
If Wor <> "" then
begin
AddWord(Words, Position, Wor);
Wor := "";
end;
end;
end;
end;
procedure ClearWords(var Wor: TWords);
begin
SetLength(Wor, 0);
end;
procedure AddWord(var Wor: TWords; Position: Integer; AddString: String);
var i: Integer;
begin
i := High(Wor);
SetLength(Wor, i+2);
Wor[i+1].Pos := Position;
Wor[i+1].Str := AddString;
end;
← →
Юрий Зотов © (2004-04-29 19:28) [2]StringList.CommaText := StringReplace(S, "|", ",", [rfReplaceAll]);
← →
TUser © (2004-04-29 19:33) [3]Скоро будет новый клиент для форума :)
← →
VMcL © (2004-04-29 19:45) [4]>>Юрий Зотов © (29.04.04 19:28) [2]
StringList.Delimiter := "|";
StringList.DelimitedText := S;
:)
← →
Андрей Сенченко © (2004-04-29 19:53) [5]VMcL © (29.04.04 19:45) [4]
Кому что привычней. Я вообще самопиской разбираю
← →
Юрий Зотов © (2004-04-29 19:53) [6]У меня круче - в одну строку.
:о)
← →
VMcL © (2004-04-29 20:15) [7]>>Юрий Зотов © (29.04.04 19:53) [6]
Зато мой вариант:
1. Быстрее выполнится, особенно если много символов-разделителей.
2. Меньше сожрет памяти.
Гы-гы.
← →
Андрей Сенченко © (2004-04-29 20:24) [8]VMcL © (29.04.04 20:15) [7]
Юрий Зотов © (29.04.04 19:53) [6]
а что-либо подобное можно изобразить ?StringList.Items.Assign ( например ) (StringReplace(S, "|",#13+#10, [rfReplaceAll]));
Не на чем проверить сейчас
← →
Smog (2004-04-30 18:45) [9]спасибо :)
Клиент будет еще не скоро ;)
← →
Fay © (2004-04-30 18:47) [10]2Андрей Сенченко © (29.04.04 20:24) [8]
По скорости - полная задница.
← →
WebErr © (2004-04-30 18:51) [11]Удалено модератором
← →
WebErr © (2004-04-30 18:51) [12]Удалено модератором
← →
Fay © (2004-04-30 18:52) [13]Удалено модератором
← →
Smog (2004-04-30 19:04) [14]2 Mihey
procedure Premake(Text: AnsiString);
var i: Integer;
StrLen: Integer;
Wor: String;
Position: Integer;
begin
ClearWords(Words);
что такое Words здесь? где его объявляли?
← →
Smog (2004-04-30 19:24) [15]VMcL,Юрий Зотов
а что такое StringList? массив типа string?
а S - это моя переменная?
← →
Андрей Сенченко © (2004-04-30 20:15) [16]Smog (30.04.04 19:24) [15]
Не совсем. Точнее "совсем не". Но представить его как массив чисто условно можно.
Напиши в программе TStringList, щелкни на нем Ctrl-F1 и почитай.
← →
Mihey © (2004-04-30 20:24) [17]2 Smog:
Words: TWords;
Массив с результатом.
← →
Mihey © (2004-04-30 20:24) [18]В догонку...
Объявлять где угодно как глобальную переменную.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c