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

Вниз

аналог split   Найти похожие ветки 

 
_max_   (2007-10-29 12:09) [0]

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

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-29 12:21) [1]

Pos + F1
Copy + F1


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


> Pos + F1Copy + F1

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


 
KSergey ©   (2007-10-29 13:06) [3]

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

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


 
Palladin ©   (2007-10-29 13:09) [4]


> Как с помощью 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;


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


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

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


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


> 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;

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


 
clickmaker ©   (2007-10-29 13:37) [7]

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;


 
Palladin ©   (2007-10-29 15:28) [8]


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

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

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


 
Leonid Troyanovsky ©   (2007-10-29 15:30) [9]


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

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

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

--
Regards, LVT.


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


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

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


 
Palladin ©   (2007-10-29 15:45) [11]


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

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


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

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


 
Anatoly Podgoretsky ©   (2007-10-29 15:57) [12]

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


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

Palladin ©   (29.10.07 15:45) [11]


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


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


 
Palladin ©   (2007-10-30 09:24) [14]

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



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
15-1192178627
Flash-device
2007-10-12 12:43
2007.11.18
"Снять" защиту от записи с Flash


2-1192772728
Alex8
2007-10-19 09:45
2007.11.18
Корректировка результата выборки


2-1193435080
Wor
2007-10-27 01:44
2007.11.18
Найти сумму елементов


15-1189799101
matt
2007-09-14 23:45
2007.11.18
Русская ОС появится во всех школах


2-1193394735
kaktus
2007-10-26 14:32
2007.11.18
Уважаемые, дайте совет.