Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 10:34   #1
Shinnok91
Пользователь
 
Регистрация: 30.07.2010
Сообщений: 30
Сообщение Вычислить количество символов участка кода на интернет странице

Помогите. Мне нужно вычислить количество символов участка кода на интернет странице (точнее на XML странице).
Есть строка <online>, но она может выглядеть и как <online type="2"> и как <online mid="7865" type="2">, причем это значение меняется очень часто. вообще, если эта строка на странице присутсвует, то фиксировано только ее начало - <online и окончание - символ ">" (первый попавшийся после "<online".

какую функцию можно использовать что бы вычислить длину этого участка.
нужно для парсера. сделал уже почти все там, одна эта функция держит.

пробовал функцию Length но никак не получается сделать так, что бы она вычисляла длину от позиции P до заданного символа.
Shinnok91 вне форума
Старый 17.03.2011, 10:41   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var i:integer;

i:=Pos('<online',s);
ShowMessage(Copy(s,i,PosEx('>',s,i)-i+1));
ну вродь примерно так
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 17.03.2011, 10:49   #3
Shinnok91
Пользователь
 
Регистрация: 30.07.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
var i:integer;

i:=Pos('<online',s);
ShowMessage(Copy(s,i,PosEx('>',s,i)-i+1));
ну вродь примерно так
мне без ShowMessage надо бы. мне значение нужно брать после этого участка кода.
Length было бы наиболее правильно использовать. а то у меня и так вложенность большая. если бы код писал не я можно было бы запутаться там.
вот какой код у меня:

Delete(Send,1, P+Length(P, '>'));
мне нужно изменить то что в скобках после length
Shinnok91 вне форума
Старый 17.03.2011, 10:52   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Length возвращает длину строки вообще то, что вы пытаетесь собаке пятую ногу пришить то?
я назвал ключевую функцию, это PosEx.
Цитата:
мне без ShowMessage надо бы.
а кто мешает убрать его?
весь тэг вернет Copy, ShowMessage там для примера.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 17.03.2011, 11:01   #5
Shinnok91
Пользователь
 
Регистрация: 30.07.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Length возвращает длину строки вообще то, что вы пытаетесь собаке пятую ногу пришить то?
я назвал ключевую функцию, это PosEx.
а кто мешает убрать его?
весь тэг вернет Copy, ShowMessage там для примера.
а переменная s тоже описывается как integer, насколько я понял?

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
я назвал ключевую функцию, это PosEx.
весь тэг вернет Copy
дело в том что мне как раз нужно обрезать из текста заданную длину.

а этот тэг мне не нужен. нужно то что находится после него до тэга
</online>
Поэтому я и использую функцию Delete.

Ну я сейчас попробую кое-что. может сработает.

Последний раз редактировалось Stilet; 23.03.2011 в 09:40.
Shinnok91 вне форума
Старый 17.03.2011, 11:24   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var i:integer;
     s:string;//наша строка в которой будем искать

i:=PosEx('>',s,Pos('<online',s))+1;
ShowMessage(Copy(s,i,PosEx('<',s,i)-i));
как я понимаю вам это надо?(код примерный, может лишний символ цепануть, или наоборот)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 17.03.2011, 11:25   #7
Shinnok91
Пользователь
 
Регистрация: 30.07.2010
Сообщений: 30
По умолчанию

проверил. на функцию posEx ругается.
неверный тип данных, а так же считает ее переменной.
Shinnok91 вне форума
Старый 17.03.2011, 11:27   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас Делфи 6?
проверьте StrUtils или StrUtil есть в юзес?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 17.03.2011, 11:29   #9
Shinnok91
Пользователь
 
Регистрация: 30.07.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
var i:integer;
     s:string;//наша строка в которой будем искать

i:=PosEx('>',s,Pos('<online',s))+1;
ShowMessage(Copy(s,i,PosEx('<',s,i)-i));
как я понимаю вам это надо?
сейчас проверю. этот вариант получше чем предыдущий выглядит.
вот какой код у меня был вначале:

Delete(Send,1, P+7);
нужно семерку заменить на такое значение, чтобы обрезался код с позиции P до первого встретившегося после позиции P символа >

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у вас Делфи 6?
проверьте StrUtils или StrUtil есть в юзес?
нет, 7. но проверю все равно.

В строке Delete(Send,1, (Copy(s1,i1,PosEx('<',s1,i1)-i1))); выдает ошибку
[Error] Unit1.pas(344): Incompatible types после последней скобки

Последний раз редактировалось Stilet; 23.03.2011 в 09:41.
Shinnok91 вне форума
Старый 17.03.2011, 12:29   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а не надо там ничего удалять, посмотрите сначало что вам Copy вернет, я ж не спроста ShowMessage ставлю, при отладке очень полезно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что делать, если количество символов в билдере не соответствует количеству символов в билде? BoT_T Общие вопросы Delphi 0 16.11.2010 10:42
Вызов события из произвольного участка кода в WPF Casper-SC Общие вопросы .NET 1 24.07.2010 10:23
количество строк на последней странице документа Jaroslav Microsoft Office Excel 5 08.06.2010 08:43
количество цифр и количество символов до первой гласной буквы 111111 Общие вопросы C/C++ 2 22.12.2008 12:15