Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.49 MB
Время: 0.034 c
6-1080232753
DeQuick
2004-03-25 19:39
2004.05.16
Пересылка файлов


1-1083676679
oleg_SYS
2004-05-04 17:17
2004.05.16
Сохранение ключа реестра в файл


11-1069715731
APXi
2003-11-25 02:15
2004.05.16
Подскажите почему не работает? Applet.OnMessage


1-1083245971
Шнур
2004-04-29 17:39
2004.05.16
Округление


14-1082141575
Knight
2004-04-16 22:52
2004.05.16
В музей купили ноутбук... сразу два прикола...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский