Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Поиск в тексте до символа


Автор: ishimcity 30.10.2007, 11:51
Здраствуйте. помогите плиз есть к примеру строка: index.php?1234567"BLABLABLA как мне из ее выдернуть только цифры? с условием цифры могут менять свою длину то есть может быть 12345 или 123456 или 1234567. вопщем принцип как получить все данные от ? до ".спасибо smile 

Автор: Alix 30.10.2007, 12:03
Код
function extractNums(const s : string) : string;
var
  i, j : integer;
begin
  result := '';
  i := pos('?', s);
  if i = 0 then
    exit;

  j := i + 1;
  while (j < length(s)) and (s[j] in ['0'..'9']) do
    inc(j);
  result := copy(s, i+1, j-i-1);
end;

Автор: aktuba 30.10.2007, 12:05
Код

function GetCode(AURL: string): string;
var
  lPos: Integer;
begin
  Result := '';
  lPos := Pos('?', AURL);
  if lPos <= 0 then Exit;
  Inc(lPos);
  while (lPos <= Length(AURL)) and (AURL[lPos] >= '0') and (AURL[lPos] <= '9') do
    Result := Result + AURL[lPos]
end;


Писал в браузере - сильно не пинать. Соответственно - не оптимизировал. Можно проще - найти начало кода (?) и окончание ("), а после скопировать все между ними:
Код

function GetCode(AURL: string): string;
var
  lPos1, lPos2: Integer;
begin
  Result := '';
  lPos1 := Pos('?', AURL);
  lPos2 := Pos('"', AURL);
  if (lPos1 > 0) and (lPos2 > 0) and (lPos2 > lPos1) then
    Result := Copy(AURL, lPos1 + 1, lPos2 - lPos1 - 2);
end;

Автор: MetalFan 30.10.2007, 12:15
а с пом. RegExpr можно красивше имхо)
Код

var
  lRE: TRegExpr;
begin
  lRE := TRegExpr.Create;
  try
    lRE.Expression := '\d+';
    if lRE.Exec( AExtractFromStr ) then
      AExtractedNumber := lRE.Match[0];
  finally
    lRE.Free;
  end;
end;

Автор: ishimcity 30.10.2007, 12:25
Спасибо друзья Alix и aktuba smile 

Автор: aktuba 30.10.2007, 13:52
Цитата

а с пом. RegExpr можно красивше имхо)


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

Автор: MetalFan 30.10.2007, 16:32
aktuba, тож верно) ну а вдруг у него еще понадобится что-то выцепить?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)