|
Основной форум Сюда все проблемы связанные с программированием. |
25.12.2008, 07:24
|
#1
|
Нуждающийся
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
|
regex в MidletPascal
Задача простая:
Нужно скачать страничку и найти там нужные строки.
ПОнимаю что я не прав используя для этого MidletPascal, но java я изучать не хочу, а красота и минимализм MP - меня очень радуют, как и платформа ZX.
Вообщем Прочитать странички я могу, но искать текст строковыми функциями будет крайне неудобно. Какие варианты вообще есть, ведь я понял так что регулярные выражения - тема не раскрыта на форуме ?
Спасибо
|
(Offline)
|
|
25.12.2008, 07:37
|
#2
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: regex в MidletPascal
Регулярные выражения в Java? Лучше примитивами искать, так как даже если бы и были регулярные выражения, они бы обрабатывали всё ооочень медленно.
|
(Offline)
|
|
25.12.2008, 08:48
|
#3
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: regex в MidletPascal
несколько вопросов: какого максимального размера скачиваемая страница; какой именно текст нужно искать (между тегами или просто? одно слово или несколько?); на каком телефоне будет работать; действия после нахождения нужного текста? MIDdletPascal плох тем что после работы строковых функций в памяти остается много мусора... если будет время и мне понравится задачка - сделаю...
|
(Offline)
|
|
25.12.2008, 09:05
|
#4
|
Нуждающийся
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
|
Ответ: regex в MidletPascal
Текст размером около 50 килобайт.
телефон - как минимум SE k300
Вытаскивать нужно ссылки из тэгов. <a href="http://ya.ru?z=1827398">
Вытащить нужно в данном случае 1827398 . регуляркой тут будет href="http://ya.ru?z=(\d+), откуда нужно получить $1
Но нельзя сказать что это единственная задача выпарсивания? но на данный момент я хотел бы решить именно такую задачу.
|
(Offline)
|
|
25.12.2008, 21:19
|
#5
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: regex в MidletPascal
А не проще ли просто искать текст ?z= и обрезать после него число.
Затача более чем простая. И регулярный выражения тут успользовать совершенно ни к чему.
Кстати, в будущем к библиотеке Lib_parse возможжно добавится и функция парсинга XML документов, что было бы полезно, к примеру, в данном случае.
|
(Offline)
|
|
25.12.2008, 21:31
|
#6
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: regex в MidletPascal
Практически полноценный html-парсер, можно производить парсинг любых тегов и их параметров.. делал для оптимизации html-страниц, где нужно было вырезать теги с учетом вложенности, или убирать ненужные параметры..
var
res : resource;
s,st,txt : string;
id_txt : integer;
i,len,b : integer;
c : char;
procedure addText(s:string);
begin
txt:=txt+s+chr(10);
formRemove(id_txt);
id_txt:=formAddString(txt);
end;
procedure nextb;
begin
if (i<len) then
begin
b:=ord(getChar(s,i));
i:=i+1;
end;
end;
procedure nextstr;
begin
while (b<=32) and (i<len) do nextb; //убрать пробелы и т.д..
if (b=ord('#')) or (b=ord(';'))
or ((b>=ord('0')) and (b<=ord('9')))
or ((b>=ord('A')) and (b<=ord('Z')))
or ((b>=ord('a')) and (b<=ord('z'))) then
begin //получить строку
st:='';
repeat
if (b>=65) and (b<=90) then b:=b+32;
st:=st+chr(b);
nextb;
until (i>=len) or not (((b>=ord('0')) and (b<=ord('9'))) or ((b>=ord('A')) and (b<=ord('Z'))) or ((b>=ord('a')) and (b<=ord('z'))));
end
else if (b=ord('"')) then
begin //строку в двойных кавычках
st:='';
repeat
st:=st+chr(b);
nextb;
until (b=ord('"')) or (i>=len);
st:=st+'"';
nextb;
end
else if (b=ord('''')) then
begin //строку в одинарных кавычках
st:='';
repeat
st:=st+chr(b);
nextb;
until (b=ord('''')) or (i>=len);
st:=st+'''';
nextb;
end
else
begin //любой другой символ
st:=chr(b);
nextb;
end;
end;
begin
showForm;
id_txt := formAddString('Programming by arT (c). [email protected]');
res := openResource('/1.htm');
if resourceAvailable(res) then
begin
s:='';
len:=0;
b:=readByte(res);
while (b<>0) do
begin
s:=s+chr(b and 255);
b:=readByte(res);
len:=len+1;
end;
closeResource(res);
end;
i:=0;
b:=0;
addText('scan START ('+len+')...');
repeat
if b=ord('<') then
begin
nextb;
nextstr;
if (st='a') then
begin
nextstr;
if (st='href') then
begin
nextstr;
if (st='=') then
begin
nextstr;
if (length(st)>8) then
if (copy(st,1,8)='http://') then
begin
addText(st); //нашли гиперссылку...
end;
end;
end;
end
else if (st='/') then
begin
nextstr;
if (st='html') then addText('/html => ok!');
end;
end
else nextb; //следующий символ
until (i>=len);
addText('COMPLETED...');
repeat delay(100); until false;
end.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.12.2008, 19:46
|
#7
|
Нуждающийся
Регистрация: 26.12.2008
Сообщений: 57
Написано 22 полезных сообщений (для 28 пользователей)
|
Ответ: regex в MidletPascal
А можешь выложить пример как загружаешь страницу? А то у меня никак не выходит. Зараннее спасибо.
|
(Offline)
|
|
28.12.2008, 20:13
|
#8
|
Знающий
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
|
Ответ: regex в MidletPascal
а в MIDletPascal help глянуть не вариант? лучше предложить не смогу...
|
(Offline)
|
|
29.12.2008, 07:41
|
#9
|
Нуждающийся
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
|
Ответ: regex в MidletPascal
ПОнятно, придется руками искать пока ?z=
Радует так же пока что это единственная пока задача, однако через какое-то время появятся похожие, думаю регулярки тут идеальное решение.
|
(Offline)
|
|
29.12.2008, 08:28
|
#10
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: regex в MidletPascal
Регулярки работают на основе тех же примитивных функций, на сколько я знаю. Но многие слишком часто использую регулярные выражения где надо и не надо. Конечно, регулярку написать проще, чем поиск кусков текста в цикле, но пострадает скорость работы приложения. Регулярные выражения - это же как бы надстройка над языком программирования. Java - это платформа, при написании под которую нужно всё максимально оптимизировать, вводить в неё в использование регулярные выражения - идиотизм.
|
(Offline)
|
|
29.12.2008, 09:00
|
#11
|
Нуждающийся
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
|
Ответ: regex в MidletPascal
Да это холивар. По идее мне скорость работы JAVA не критична, а вот скорость разработки критична.Я за Регекспы. Пока же придется конечно пользоваться циклами, пока не найдется решение.
|
(Offline)
|
|
29.12.2008, 12:30
|
#12
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: regex в MidletPascal
Оно и не найдётся. Писать класс, эмулирующий регулярки, никто не будет.
|
(Offline)
|
|
12.02.2009, 19:41
|
#13
|
AnyKey`щик
Регистрация: 21.05.2007
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: regex в MidletPascal
Есть реализации для паскаля (легко найти такой гуглом), можно один из таких взять и портировать под MIDletPascal!
|
(Offline)
|
|
12.02.2009, 19:45
|
#14
|
Знающий
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений (для 33 пользователей)
|
Ответ: regex в MidletPascal
можно один из таких взять и портировать под MIDletPascal!
|
Взять и 'портировать' можно все, вопрос ????и так понятно, но надо же портировать, возьми и портируй, а не говори, что легоко найти гуглем, найти все мона, а вот сделать, не каждый сможет
|
(Offline)
|
|
13.02.2009, 08:50
|
#15
|
AnyKey`щик
Регистрация: 21.05.2007
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Ответ: regex в MidletPascal
Сообщение от TEMNED
Взять и 'портировать' можно все, вопрос ????и так понятно, но надо же портировать, возьми и портируй, а не говори, что легоко найти гуглем, найти все мона, а вот сделать, не каждый сможет
|
Cделать каждый может! Было бы достаточно желания! В данном случае, класс лишь немного подправить придётся, изменив синтаксис слегка(под спицифику этой реализации паскаля)... язык то один, лишь не большие различия в синтаксисе...
Да даже если бы с нуля надо было написать, а не портировать, не ужели это не выполнимо или на столько трудно? Всё упирается лишь во время, а не выполнимых задач нету!
А я портирую, если мне будет не удобена та прога, которую сейчас ставлю на замену MP (я сижу под GNU/Linux, и через wine юзать проги не люблю, но у этой проги есть минусы... хоть и будет работать нормально).
ЗЫ на данный момент проблему парсинга решаю иначе, на хост загрузил скриптик перловый, который парсит нужную мне страницу и выдаёт нужные даннные в нужном формате, а я это дело забираю своим мидлетом
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:40.
|