Главная страница
    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.48 MB
Время: 0.047 c
3-1082485263
Igoro4ek
2004-04-20 22:21
2004.05.16
Ошибка при создании таблицы


4-1080382044
Игорь
2004-03-27 13:07
2004.05.16
Работа с дискетой


1-1082965904
Victor_A
2004-04-26 11:51
2004.05.16
Как засунуть модуль .dll в .EXE и работать с ним от туда


14-1082696455
V.exeR
2004-04-23 09:00
2004.05.16
"Улица ремесел"


9-1072167927
Kair
2003-12-23 11:25
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский