Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   парими значения (https://forum.antichat.xyz/showthread.php?t=211039)

akimov_aleks 12.06.2010 15:13

парсим значения
 
Возник вопрос.
я хочу с парсить значения с исходного кода.
Код:

'idi': '784167',
если использовать так
idi':=Copy(S, Pos('idi'', V)+7, 6);
то касяк так как 784167 может состоять как из 6 так из 5 или 7 цифр
попробовал через функцию
Код:

idi':=(Pars('от',S,'до'));
от это - 'idi': '
до это- ',
так нельзя подставить граници от до так как они содержат знак '
сама функция
Код:

function Pars(T_, ForS, _T: string): string;
var
  a, b: integer;
begin
  Result := '';
  if (T_ = '') or (ForS = '') or (_T = '') then
    Exit;
  a := Pos(T_, ForS);
  if a = 0 then
    Exit
  else
    a := a + Length(T_);
  ForS := Copy(ForS, a, Length(ForS) - a + 1);
  b := Pos(_T, ForS);
  if b > 0 then
    Result := Copy(ForS, 1, b - 1);
end;

какие еще есть методы подскажите.

GhostOnline 12.06.2010 16:08

Цитата:

procedure TForm2.Button3Click(Sender: TObject);
var
s : string;
result : string;
i : Byte;
begin
s := '''idi'': ''7841671'',';
s := Copy(S, Pos('idi''', S)+7);
for I := 1 to Length(s) do
if (Ord(s[i]) >= 48) and (Ord(s[i]) <= 57) then
result := result + s[i]
else
Break;
ShowMessage(result);
end;
...

ErrorNeo 12.06.2010 16:15

idi:=Copy(S, Pos('idi'', V)+7, 7);
if not (idi[5] in ['0'..'9']) then setlength(idi,5) else
if not (idi[6] in ['0'..'9']) then setlength(idi,6);

Ra$cal 12.06.2010 16:22

регэкспы?

GhostOnline 12.06.2010 16:25

ErrorNeo кстати да, можно же на вхождение в множество проверять.
Я сначал объявлял переменную set of '0'..'9' так там оказывалось не то что я ожидал.
Но твой способ вроде катит только на 5-6 цифр, остальное надо дописывать.
Допустим если 10 цифр будет?
Переделанный код с множествами
Цитата:

s := Copy(S, Pos('idi''', S)+7);
for I := 1 to Length(s) do
if s[i] in ['0'..'9'] then
result := result + s[i]
else
Break;
ShowMessage(result);

ErrorNeo 12.06.2010 16:26

а я в своих программах не допускаю невозможных случаев=)
если ТС сказал 5-7 символов, значит 5-7 символов! xD

Ra$cal 12.06.2010 17:24

'(?<id>[\w]+)'\s*:\s*'(?<number>[\d]+)'

Вот и все. Что вы там очередные велосипеды придумываете?

Если лимиты есть можно точнее ограничить
'(?<id>[\w]+)'\s*:\s*'(?<number>[\d]{5,7})'

M_script_ 12.06.2010 18:03

PHP код:

sText.Delete(1sText.Pos("'idi':") + 1);
sText.Delete(1sText.Pos("'"));
sText.SetLength(sText.Pos("'") - 1); 



Время: 10:17