Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

12.06.2010, 15:13
|
|
Новичок
Регистрация: 03.05.2009
Сообщений: 22
Провел на форуме: 38103
Репутация:
0
|
|
парсим значения
Возник вопрос.
я хочу с парсить значения с исходного кода.
если использовать так
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;
какие еще есть методы подскажите.
Последний раз редактировалось akimov_aleks; 12.06.2010 в 15:45..
|
|
|

12.06.2010, 16:08
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
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;
...
Последний раз редактировалось GhostOnline; 12.06.2010 в 16:11..
|
|
|

12.06.2010, 16:15
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
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);
|
|
|

12.06.2010, 16:22
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
регэкспы?
|
|
|

12.06.2010, 16:25
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
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);
|
|
|

12.06.2010, 16:26
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
а я в своих программах не допускаю невозможных случаев=)
если ТС сказал 5-7 символов, значит 5-7 символов! xD
|
|
|

12.06.2010, 17:24
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
'(?<id>[\w]+)'\s*:\s*'(?<number>[\d]+)'
Вот и все. Что вы там очередные велосипеды придумываете?
Если лимиты есть можно точнее ограничить
'(?<id>[\w]+)'\s*:\s*'(?<number>[\d]{5,7})'
|
|
|

12.06.2010, 18:03
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
PHP код:
sText.Delete(1, sText.Pos("'idi':") + 6 - 1);
sText.Delete(1, sText.Pos("'"));
sText.SetLength(sText.Pos("'") - 1);
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|