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

Вниз

составить Pattern(RegExp)   Найти похожие ветки 

 
dmitry1991   (2009-06-22 16:58) [0]

задача в следующем:

имеется список строк вида:
"Палатка туристическая Nova Tour Тайга 4 км N"    ""    "1636"    "0"
"Палатка туристическая Nova Tour Тайга 4 N"    ""    "1636"    "0"
"Ракетка теннисная"    ""    "2015"    "0"
"Шахматы пластиковые на магнитах"    ""    "1991"    "0"
"Шахматы 25x25 дерево"    ""    "1991"    "0"
"Шахматы 25x25 пластиковые на магнитах"    ""    "1991"    "0"
Необходимо извлечь 4 составляющие строки, значения в одинарных кавычках (значения разделены между собой символом табуляции).Помогите составить корректное условие поиска (Pattern).


 
Медвежонок Пятачок ©   (2009-06-22 17:00) [1]

засплиттить всю строку целиком в список по символу табуляции и все


 
dmitry1991   (2009-06-22 17:05) [2]

можете набросать пример, впервые сталкиваюсь с regexp


 
Медвежонок Пятачок ©   (2009-06-22 17:08) [3]

Меnод Split.
Аргументами входная строка, шаблон-разделитель (табуляция), и экземпляр списка куда все это засовывать


 
Palladin ©   (2009-06-22 17:12) [4]

Var
ss:TStringList;
n,m:Integer;

ss:=TStringList.Create;
Try
 n:=Pos(#9,s); m:=1;
 While n<>0 Do
  Begin
   ss.Add(Copy(s,m,n-1); m:=n+1;
   n:=PosEx(#9,s,m);
  End;
 ss.Add(Copy(s,m,Length(s));
Finally
ss.Free;
End;


 
Юрий Зотов ©   (2009-06-22 17:17) [5]

> Palladin ©   (22.06.09 17:12) [4]

Мне тоже кажется, что привлечение регвыражений для такой простенькой задачки - это стрельба из пушки по воробьям.


 
Palladin ©   (2009-06-22 17:23) [6]

Мне тоже, причем очень сильно, отсюда и пример без использования тяжелой артиллерии )

А так же, в случае использования  Делфи ниже 2009, рекомендую аффтору использовать следующую функцию:

Function vtPos(Const SS,S:String;p_nFrom:Integer=1):Integer;
Var
 nSLen,nSSLen,i,c:Integer;
Begin
 Result:=0;
 nSSLen:=Length(ss);
 nSLen:=Length(s);
 If (nSSLen=0) or (nSLen=0) or (p_nFrom=0) Then Exit;
 If p_nFrom>0 Then
  Begin
   c:=1;
   For i:=p_nFrom to nSLen Do
    If s[i]=ss[c] Then
     Begin
      Inc(c);
      If c=nSSLen+1 Then
       Begin
        Result:=i-c+2;
        Break;
       End;
     End Else c:=1;
  End Else
  Begin
   p_nFrom:=nSLen+p_nFrom+1;
   c:=nSSLen;
   For i:=p_nFrom Downto 1 Do
    If s[i]=ss[c] Then
     Begin
      Dec(c);
      If c=0 Then
       Begin
        Result:=i;
        Break;
       End;
     End Else c:=nSSLen;
  End;
End;


 
Palladin ©   (2009-06-22 17:23) [7]

вместо шататной функции PosEx из D7


 
dmitry1991   (2009-06-22 17:29) [8]


> Юрий Зотов ©   (22.06.09 17:17) [5]
> > Palladin ©   (22.06.09 17:12) [4]Мне тоже кажется, что
> привлечение регвыражений для такой простенькой задачки -
>  это стрельба из пушки по воробьям.


Так-то оно так... но в моем случае препод требует сделать именно с использованием RegExp. Уже несколько часов пытаюсь составить выражение - ничего не выходит.


 
Медвежонок Пятачок ©   (2009-06-22 17:32) [9]

SplitRegExpr(#9,MyString,MyStringList);



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
15-1245308606
тимохов
2009-06-18 11:03
2009.08.16
Ограничения VS 2088 Express и MSSQL Server 2008 Express


15-1245117148
brother
2009-06-16 05:52
2009.08.16
функция Exel


15-1244795544
dmitry1991
2009-06-12 12:32
2009.08.16
ООП


2-1244993614
Gumz
2009-06-14 19:33
2009.08.16
Преобразование координат пикселей в градусы


15-1244838605
Юрий
2009-06-13 00:30
2009.08.16
С днем рождения ! 13 июня 2009 суббота