Форум: "Начинающим";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
Внизаналог 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 найти позицию второго символа "|" и т.
> д.?"
вообще страшная сверхзадача, можно и без PosFunction 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c