Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Разделение строки на подстроки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
1-1083251300
Smog
2004-04-29 19:08
2004.05.16
Разделение строки на подстроки


3-1082537942
Vopros
2004-04-21 12:59
2004.05.16
Encrypted dBASE tables как открыть?


3-1082627560
vantage10
2004-04-22 13:52
2004.05.16
учет рабочего времени


3-1082365773
TransparentGhost
2004-04-19 13:09
2004.05.16
Можно ли использовать IF (..) OR/AND (..) THEN в Triggere?


14-1083085514
MDT
2004-04-27 21:05
2004.05.16
Форум для специалистов по математической статистике