Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 25.12.2008, 07:24   #1
jkeks
Нуждающийся
 
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
regex в MidletPascal

Задача простая:
Нужно скачать страничку и найти там нужные строки.
ПОнимаю что я не прав используя для этого MidletPascal, но java я изучать не хочу, а красота и минимализм MP - меня очень радуют, как и платформа ZX.
Вообщем Прочитать странички я могу, но искать текст строковыми функциями будет крайне неудобно. Какие варианты вообще есть, ведь я понял так что регулярные выражения - тема не раскрыта на форуме ?
Спасибо
(Offline)
 
Ответить с цитированием
Старый 25.12.2008, 07:37   #2
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: regex в MidletPascal

Регулярные выражения в Java? Лучше примитивами искать, так как даже если бы и были регулярные выражения, они бы обрабатывали всё ооочень медленно.
(Offline)
 
Ответить с цитированием
Старый 25.12.2008, 08:48   #3
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: regex в MidletPascal

несколько вопросов: какого максимального размера скачиваемая страница; какой именно текст нужно искать (между тегами или просто? одно слово или несколько?); на каком телефоне будет работать; действия после нахождения нужного текста? MIDdletPascal плох тем что после работы строковых функций в памяти остается много мусора... если будет время и мне понравится задачка - сделаю...
(Offline)
 
Ответить с цитированием
Старый 25.12.2008, 09:05   #4
jkeks
Нуждающийся
 
Регистрация: 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
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: regex в MidletPascal

А не проще ли просто искать текст ?z= и обрезать после него число.
Затача более чем простая. И регулярный выражения тут успользовать совершенно ни к чему.
Кстати, в будущем к библиотеке Lib_parse возможжно добавится и функция парсинга XML документов, что было бы полезно, к примеру, в данном случае.
(Offline)
 
Ответить с цитированием
Старый 25.12.2008, 21:31   #6
abcdef
Знающий
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
jkeks (29.12.2008)
Старый 28.12.2008, 19:46   #7
12121
Нуждающийся
 
Регистрация: 26.12.2008
Сообщений: 57
Написано 22 полезных сообщений
(для 28 пользователей)
Ответ: regex в MidletPascal

А можешь выложить пример как загружаешь страницу? А то у меня никак не выходит. Зараннее спасибо.
(Offline)
 
Ответить с цитированием
Старый 28.12.2008, 20:13   #8
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: regex в MidletPascal

а в MIDletPascal help глянуть не вариант? лучше предложить не смогу...
(Offline)
 
Ответить с цитированием
Старый 29.12.2008, 07:41   #9
jkeks
Нуждающийся
 
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
Ответ: regex в MidletPascal

ПОнятно, придется руками искать пока ?z=
Радует так же пока что это единственная пока задача, однако через какое-то время появятся похожие, думаю регулярки тут идеальное решение.
(Offline)
 
Ответить с цитированием
Старый 29.12.2008, 08:28   #10
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: regex в MidletPascal

Регулярки работают на основе тех же примитивных функций, на сколько я знаю. Но многие слишком часто использую регулярные выражения где надо и не надо. Конечно, регулярку написать проще, чем поиск кусков текста в цикле, но пострадает скорость работы приложения. Регулярные выражения - это же как бы надстройка над языком программирования. Java - это платформа, при написании под которую нужно всё максимально оптимизировать, вводить в неё в использование регулярные выражения - идиотизм.
(Offline)
 
Ответить с цитированием
Старый 29.12.2008, 09:00   #11
jkeks
Нуждающийся
 
Регистрация: 04.10.2007
Сообщений: 64
Написано одно полезное сообщение
Ответ: regex в MidletPascal

Да это холивар. По идее мне скорость работы JAVA не критична, а вот скорость разработки критична.Я за Регекспы. Пока же придется конечно пользоваться циклами, пока не найдется решение.
(Offline)
 
Ответить с цитированием
Старый 29.12.2008, 12:30   #12
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: regex в MidletPascal

Оно и не найдётся. Писать класс, эмулирующий регулярки, никто не будет.
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 19:41   #13
123
AnyKey`щик
 
Регистрация: 21.05.2007
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Re: regex в MidletPascal

Есть реализации для паскаля (легко найти такой гуглом), можно один из таких взять и портировать под MIDletPascal!
(Offline)
 
Ответить с цитированием
Старый 12.02.2009, 19:45   #14
temned
Знающий
 
Аватар для temned
 
Регистрация: 29.07.2008
Адрес: Россия,Саратов
Сообщений: 206
Написано 22 полезных сообщений
(для 33 пользователей)
Ответ: regex в MidletPascal

можно один из таких взять и портировать под MIDletPascal!
Взять и 'портировать' можно все, вопрос ????и так понятно, но надо же портировать, возьми и портируй, а не говори, что легоко найти гуглем, найти все мона, а вот сделать, не каждый сможет
(Offline)
 
Ответить с цитированием
Старый 13.02.2009, 08:50   #15
123
AnyKey`щик
 
Регистрация: 21.05.2007
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Ответ: regex в MidletPascal

Сообщение от TEMNED Посмотреть сообщение
Взять и 'портировать' можно все, вопрос ????и так понятно, но надо же портировать, возьми и портируй, а не говори, что легоко найти гуглем, найти все мона, а вот сделать, не каждый сможет
Cделать каждый может! Было бы достаточно желания! В данном случае, класс лишь немного подправить придётся, изменив синтаксис слегка(под спицифику этой реализации паскаля)... язык то один, лишь не большие различия в синтаксисе...
Да даже если бы с нуля надо было написать, а не портировать, не ужели это не выполнимо или на столько трудно? Всё упирается лишь во время, а не выполнимых задач нету!
А я портирую, если мне будет не удобена та прога, которую сейчас ставлю на замену MP (я сижу под GNU/Linux, и через wine юзать проги не люблю, но у этой проги есть минусы... хоть и будет работать нормально).
ЗЫ на данный момент проблему парсинга решаю иначе, на хост загрузил скриптик перловый, который парсит нужную мне страницу и выдаёт нужные даннные в нужном формате, а я это дело забираю своим мидлетом
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скачать MidletPascal smesh Прочие вопросы 14 30.06.2011 15:57
архиваторы на MIDletPascal abcdef Проекты на MidletPascal 1 30.09.2009 16:41
MidletPascal - Вирус?! Mix6s Прочие вопросы 3 08.02.2008 02:10
MidletPascal. Что это. Данил MidletPascal 12 23.10.2007 05:27
MidletPascal Version 2.02 Red Ninja(Михайлов Никита) Основной форум 14 02.02.2007 18:44


Часовой пояс GMT +4, время: 01:29.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com