Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

аналог split


_max_ ©   (2007-10-29 12:09:00) 

Добрый день!
Есть файл, состоящий из строк типа:

first line|qweqwe
second line|sadsad
next line|adasd
...


Нужно проанализировать каждую часть строки (разделитель"|"). Самый простой способ - каждую строку загружать в массив, элементами которого будут те сами части. На Перле это сделать просто:

open(а, "<data.txt");
while(<f_r>)
{
@a = split /\|/, $_;
#здесь $a[0] - первая часть,  $a[1] - вторая часть
#тоесть, для первой строки  $a[0]=first line, $a[1]=qweqwe


А вот как организовать это в Делфи?


Palladin   (2007-10-30 09:24:00) [1]

в D6 точно нет такого...


Игорь Шевченко   (2007-10-29 17:10:00) [2]

Palladin ©   (29.10.07 15:45) [11]


> а в DelimitedText как оказалось подстава с пробелами...


StrictDelimiter := true; // В D2006 по крайней мере. Не далее как сегодня натолкнулся :)


Anatoly Podgoretsky   (2007-10-29 15:57:00) [3]

Парню нужен ассоциативный массив, из готового вряд ли что подойдет, а написать свой не так уж и сложно.


Palladin   (2007-10-29 15:45:00) [4]


> Та по пробелам не разбивает

посмотрел на SetDelimitedText... как все жестоко... :)


> избаловались вы :)

да нет, у меня свой набор рутин :), а в DelimitedText как оказалось подстава с пробелами...


clickmaker   (2007-10-29 15:31:00) [5]


>  [8] Palladin ©   (29.10.07 15:28)

избаловались вы :)
это из проекта под Д5


Leonid Troyanovsky   (2007-10-29 15:30:00) [6]


> Palladin ©   (29.10.07 15:28) [8]

> так типа эта...

Та по пробелам не разбивает.

--
Regards, LVT.


Palladin   (2007-10-29 15:28:00) [7]


> clickmaker ©   (29.10.07 13:37) [7]

так типа эта...

List.Delimiter:=Delimiter;
List.DelimitedText:=Line;


clickmaker   (2007-10-29 13:37:00) [8]

procedure ParseLine(Line: string; Delimiter: char; List: TStrings);
var
 i: integer;
 s: string;
begin
 if List.Count>0 then List.Clear;
 s:='';
 for i:=1 to Length(Line) do begin
   if Line[i]=Delimiter then begin
     List.Add(s);
     s:='';
   end
   else
     s:=s+Line[i];
 end;
 if s<>'' then List.Add(s);
end;


_max_   (2007-10-29 13:17:00) [9]


> Function PosFrom(Const s:String;c:Char;p_nFrom:Integer):
> Integer;Var  i:Integer;Begin  For i:=p_nFrom to Length(s)
> Do   If s[i]=c Then    Begin     Result:=i;     Exit;  
>  End;  Result:=0;End;

В принципе тоже вариант.
Спасибо!


_max_   (2007-10-29 13:11:00) [10]


> В Delphi7 есть PosExНу а для прочего - написано же, что
> еще и про Copy надо почитать. Ну и мозги типа тоже применить
> надо, только справки по ним не написано.

Функции pos и copy я знаю, и, как я писал выше, используя только эти функции алгоритм разделения на части, к примеру строки " part1|part2|part3|part4" усложняется, т.к. каждая часть может иметь различное кл-во символов. А вот о PosEx еще не слышал, ща почитаю...


Palladin   (2007-10-29 13:09:00) [11]


> Как с помощью pos найти позицию второго символа "|" и т.
> д.?"

вообще страшная сверхзадача, можно и без Pos

Function PosFrom(Const s:String;c:Char;p_nFrom:Integer):Integer;
Var
 i:Integer;
Begin
 For i:=p_nFrom to Length(s) Do
  If s[i]=c Then
   Begin
    Result:=i;
    Exit;
   End;
 Result:=0;
End;


KSergey   (2007-10-29 13:06:00) [12]

> _max_   (29.10.07 13:02) [2]
> "Как с помощью pos найти позицию второго символа "|" и т.д.?"

В Delphi7 есть PosEx
Ну а для прочего - написано же, что еще и про Copy надо почитать. Ну и мозги типа тоже применить надо, только справки по ним не написано.


_max_   (2007-10-29 13:02:00) [13]


> Pos + F1Copy + F1

Эти функции конечно можно использовать, но только если каждая строка состоит из двох частей, а вот если три и более, то алгоритм с использованием данных функций усложняется, т.к.: "Как с помощью pos найти позицию второго символа "|" и т.д.?"


Palladin   (2007-10-29 12:21:00) [14]

Pos + F1
Copy + F1


Наверх

Титульная страница Поиск, карта сайта Написать письмо