Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 найти позицию второго символа "|" и т.
> д.?"

вообще страшная сверхзадача, можно и без 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.042 c
3-1183651954
Sergey_G
2007-07-05 20:12
2007.11.18
Сортировка


15-1192094854
Prohodil Mimo
2007-10-11 13:27
2007.11.18
Как зайти в меню DSL-модема?


15-1192167505
новый_
2007-10-12 09:38
2007.11.18
class(T..., T...)


15-1192431257
KSergey
2007-10-15 10:54
2007.11.18
Миллионер Марк Шаттлворт ... выпускает массовый ноутбук (250$)


15-1192607772
de.
2007-10-17 11:56
2007.11.18
LIKE АБВ%





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский