Чтение из файла на сервере и парсинг
|
|
Nova | Дата: Воскресенье, 14 Июня 2009, 06:22 | Сообщение # 1 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Приветствую всех! Насколько понимаю, MMB может считывать информацию из текстовых файлов, верно? Так вот. Я хочу создать программу, которая отображала бы карту мира одной игры, Freelancer. И, конечно же, необходимо чтобы она считывала информацию из файлов. Необходимо считывать, т.к. я являюсь разработчким мода на одном из серверов этой игры, и нужно учитывать обновления мода. Основы MMB я знаю, не раз делал программы - генератор фраз (Если кто знаком с упячкой, УпячкаТулз - моя работа), информационные утилиты. В общем, осуществить смогу. Главное - КАК произвести чтение. К примеру, на сервере я буду создавать файл, в котором все описывается, и в дальнейшем буду вносить изменения. Необходимо научить мой проект считывать информацию с этого файла! Прошу помощи и советов по реализации!
Сообщение отредактировал Nova - Воскресенье, 14 Июня 2009, 07:00 |
|
| |
Sower | Дата: Воскресенье, 14 Июня 2009, 06:54 | Сообщение # 2 |
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
| Читай хелп по строковым функциям, там всё есть, лучше скачать рускиий хелп здесь, ну если уж там не поймешь, то тогда спрашивай здесь
|
|
| |
Sower | Дата: Воскресенье, 14 Июня 2009, 07:03 | Сообщение # 3 |
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
| Quote (Nova) К примеру, на сервере я буду создавать файл, в котором все описывается, и в дальнейшем буду вносить изменения. Необходимо научить мой проект считывать информацию с этого файла! Тебе нужен плагин лови в прикреплении, он может закачивать с сервера любые файлы, но не записывать!
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 07:23 | Сообщение # 4 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Ох, как же я этот момент в хелпе проморгал. Спасибо огромное! Теперь второй момент, более тяжелый. Как у MMB с онлайновостью? Файл то на сервере будет находиться, а программа на компе у пользователя. Необходимо чтение этого файла с сервера. Добавлено (14 Июнь 2009, 07:11) --------------------------------------------- О, ты читаешь мои мысли) Спасибо еще раз, тема исчерпана. Не закрывайте пожалуйста, может еще что спрошу по теме. Добавлено (14 Июнь 2009, 07:23) --------------------------------------------- А вот и вопрос... как пользоваться этим плагином?)) А именно, как указать директорию куда скачивать файл (она ведь нужна чтобы из файла прочесть), и как произвечсти скачку по нажатии на кнопку "обновить"?
Сообщение отредактировал Nova - Воскресенье, 14 Июня 2009, 07:27 |
|
| |
Sower | Дата: Воскресенье, 14 Июня 2009, 07:35 | Сообщение # 5 |
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
| Code **url адрес файла =========== URL$ = 'http://www.mmbforums.com/ipb/uploads/av-3295.jpg' PluginSet("Internet","URL$") PluginRun("Internet","URL") =========== **куда сохранять, под каким именем =========== Dest$ = 'C:\logo.jpg' PluginSet("Internet","Dest$") =========== **начинаем закачку =========== PluginRun("Internet","Download") ===========
**здесь получаем инф. о удачности закачки PluginRun("Internet","Result") PluginGet("Internet","Result$") ** Result: SI (Download succes) ** NO (Download Error) Message("Download result: ","Result$")
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 11:09 | Сообщение # 6 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| От спасибки Добавлено (14 Июнь 2009, 11:09) --------------------------------------------- Хм. Не работает. Результат выдает не SI и не NO, а ноль. Значит.. делаю плагин на странице, создаю кнопочку, пихаю туда вот это к примеру Code URL$ = 'http://arbital.ru/img/logo.gif' PluginSet("Internet","URL$") PluginRun("Internet","URL") Dest$ = 'C:\logo.gif' PluginSet("Internet","Dest$") PluginRun("Internet","Download") PluginRun("Internet","Result") PluginGet("Internet","Result $") ** Result: SI (Download succes) ** NO (Download Error) Message("Download result: ","Result$") , и? Жму F5, жму на кнопочку, выдает сообщение где написано Result$ = 0. Ниче не пойму.
|
|
| |
Sower | Дата: Воскресенье, 14 Июня 2009, 12:01 | Сообщение # 7 |
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
| Quote (Nova) PluginGet("Internet","Result $") почему пробел Result $ ? Вот так напишешь Result$ и все ок, ты ведь в сообщение выводишь Result$, а из плагина кладешь инфу в Result $ , а ноль потомучто команда message всегда выводит ноль рядом с текстом (типа код ошибки), если переменная пустая, один ноль и остается
Сообщение отредактировал Grand - Воскресенье, 14 Июня 2009, 13:58 |
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 17:08 | Сообщение # 8 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Неа. Это сообщение почему-то такоевышло, в скрипте ошибок нету.
Сообщение отредактировал Nova - Воскресенье, 14 Июня 2009, 17:11 |
|
| |
Alex3A | Дата: Воскресенье, 14 Июня 2009, 17:30 | Сообщение # 9 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| В принципе объект хтмл может загрузить в проект любой файл из сетки, передать в проект полученое, можно ява скриптом, в этом направлении надо попробывать.
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 18:18 | Сообщение # 10 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Хех)) Все ясно, очередная глупая ошибка) У плагина название должно быть Internet, а я не переименовал) Добавлено (14 Июнь 2009, 18:18) --------------------------------------------- Трабла похуже. Как научить выводить только то что нужно из файла? Вот существует статистика онлайн - http://80.251.126.41/index.html Один игрок отображается как Code <TR> <TD CLASS=name>AlexK</TD> <TD CLASS=rank>1</TD> <TD CLASS=system>New York</TD> <TD CLASS=ship>Starflier - ge_fighter</TD> </TR> Я качаю этот файл, отображаю его там где надо. Code Show("online_box") Show("online_list") URL$ = 'http://80.251.126.41/index.html' PluginSet("Internet","URL$") PluginRun("Internet","URL") Dest$ = 'C:\online.txt' PluginSet("Internet","Dest$") PluginRun("Internet","Download") text$='C:\online.txt' FromLine=2 NumOfLines=1000 RetStr ing$=StrFromFile(text$,FromLine,NumOfLines) DisplayValue("online_list","RetString$") А он мне выдает html-код. Это понятно что он его выдает. Но каким образом выводить только то что надо?
|
|
| |
YURIY | Дата: Воскресенье, 14 Июня 2009, 18:20 | Сообщение # 11 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Nova) А он мне выдает html-код. Это понятно что он его выдает. Но каким образом выводить только то что надо? Распарсить код. Quote (Grand) Читай хелп по строковым функциям, там всё есть
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 18:56 | Сообщение # 12 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Quote (YURIY) Распарсить код. Разумеется, но если бы я знал как) А может есть вариант проще? Вот у нас есть пример игрока. Code <TR> <TD CLASS=name>AlexK</TD> <TD CLASS=rank>1</TD> <TD CLASS=system>New York</TD> <TD CLASS=ship>Starflier - ge_fighter</TD> </TR> Может как нибудь создать в переменных - в первую ник, во вторую уровень, в третью систему, в четвертую корабль? Только как сделать так чтобы прога воспринимала то что находится между <TD CLASS=name> и </TD> как переменную?
|
|
| |
YURIY | Дата: Воскресенье, 14 Июня 2009, 19:07 | Сообщение # 13 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Nova) но если бы я знал как) И ещё раз: Quote (Grand) Читай хелп по строковым функциям, там всё есть Если вы думаете, что там что-то сложное - вы ошибаетесь. Но я лично думаю, что хелп вы даже и не думали открывать. Вот ссылочка, кстати: http://mmbuilder.ru/load/42-1-0-498 Мне смешно даже помогать вам в данной ситуации, так как код очень элементарный.
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 19:14 | Сообщение # 14 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Quote (YURIY) Но я лично думаю, что хелп вы даже и не думали открывать. Ошибаетесь. Я около часа рыскаю по хелпу, разделу "Дополнительные строковые функции", и ничего не могу найти, хоть убейте. Подскажите хотя бы где искать
|
|
| |
YURIY | Дата: Воскресенье, 14 Июня 2009, 19:23 | Сообщение # 15 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Хорошо, что я ошибаюсь Quote (Nova) Дополнительные строковые функции Правильно, там и нужно Рассмотрим простой пример на основе одной строки вашего html-кода: Code ** Исходная строка a$='<TD CLASS=name>AlexK</TD>' ** Приведём её к виду TD CLASS=name>AlexK</TD> a$=StrDel(a$,1,1) ** Найдём позицию первого символа > a=POS(>,a$)+1 ** Найдём позицию первого символа < b=POS(<,a$) ** Вычислим длину искомого слова между > и < c=b-a ** Скопируем искомое слово в новую переменную ** где a - с какого символа копировать, ** c - длина текста для копирования a$=StrCopy(a$,a,c) Message("a$","") И дальше в таком духе. Будут вопросы - вам на наш форум
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 19:29 | Сообщение # 16 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| От спасибо! Тут скорее была проблема не в том что я не могу что-то найти, а в отсутствии логического мышления на этот момент)
|
|
| |
YURIY | Дата: Воскресенье, 14 Июня 2009, 19:34 | Сообщение # 17 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Не за что Quote (Nova) в отсутствии логического мышления Это нормально Тем более, если вы только начали заниматься программированием. Думаю, маленький пример выше даст вам некоторую точку, от которой нужно отталкиваться дальше! Удачи!
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 20:05 | Сообщение # 18 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Просто иногда находит непонимание, обычно в спешке, а спешка в результате чрезмерного энтузиазма) Вот как сейчас... Ну где тут ошибка?(( Ноль выдает. Code ** Получаем файл URL$ = 'http://80.251.126.41/index.html' PluginSet("Internet","URL$") PluginRun("Internet","URL") Dest$ = 'C:\online.txt' PluginSet("Internet","Dest$") PluginRun("Internet","Download") ** На этой строке первый ник FromLine=17 ** Считываем все ники For Runner=1 To 100 ** Получаем строку text$='C:\online.txt' ** строка с ником идет каждые 6 строк FromLine=FromLine+6 NumOfLines=1 RetString$=StrFromFile(text$,FromLine,NumOfLines) a$=RetString$ ** Обрабатываем a$=StrDel(a$,1,1) a=POS(>,a$)+1 b=POS(<,a$) c=b-a a$=StrCopy(a$,a,c) ** Загоняем результат как элемент массива onliner$[all+1]=a$ runner=runner+1 Next Runner ** Выводим список ников DisplayValue("online_list","onliner$")
|
|
| |
YURIY | Дата: Воскресенье, 14 Июня 2009, 20:09 | Сообщение # 19 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Nova) Ну где тут ошибка?(( Ноль выдает. Code onliner$[all+1]=a$ ... ** Выводим список ников DisplayValue("online_list","onliner$") Если вы работаете с массивом, будьте добры выводить каждый элемент массива. Запись onliner$ неверна.
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Воскресенье, 14 Июня 2009, 20:36 | Сообщение # 20 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Хочу хотя бы вывести 1 ник, пишу DisplayValue("online_list","onliner$[1]"), все равно пишет ноль.
|
|
| |
YURIY | Дата: Воскресенье, 14 Июня 2009, 20:48 | Сообщение # 21 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Nova) For Runner=1 To 100 Некорректная запись. Вам нужно конкретно знать, сколько считывать раз. 100 - это число поставлено вами наобум и программа под конец просто обращается к несуществующим строкам файла. За счёт чего в Quote (Nova) a$=StrCopy(a$,a,c) у нас пустота. А Quote (Nova) onliner$[all+1]=a$ all+1 - у вас всегда равно 1. Счётчик-то кто будет увеличивать? А так как в числе последних строк у нас пустота - вы и получаете на выводе пустую строку. Один элемент массива и в нём пусто. Всё логично Кстати, настоятельно советую вам пользоваться отладчиком, чтобы легче искать ошибки! Либо ставить после ключевых строчек скрипта сообщения Message с выводом нужных переменных.
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Понедельник, 15 Июня 2009, 00:50 | Сообщение # 22 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Разобрался! Все отлично показывает и обновляет. Такое вот дело! Как изменить цвет текста?)) Так чтоб кусок тескста белый, а кусок зеленый? К примеру "Ник:" белым, а сам ник зеленым выводился.
|
|
| |
YURIY | Дата: Понедельник, 15 Июня 2009, 00:56 | Сообщение # 23 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Nova) Такое вот дело! Как изменить цвет текста?)) Так чтоб кусок тескста белый, а кусок зеленый? К примеру "Ник:" белым, а сам ник зеленым выводился. Использовать несколько текстовых объектов, что не очень удобно (так как их число заранее неизвестно) или (будете смеяться) - использовать объект HTML Browser - в программе формировать html-файл с нужной раскраской текста и отдавать на вывод в программу.
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Понедельник, 15 Июня 2009, 01:01 | Сообщение # 24 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Quote (YURIY) Использовать несколько текстовых объектов Мало того что не удобно, так это все то над чем я парился 3 часа переписывать по другому, а там огого, элементы массива выводятся ведь отдельно. Quote (YURIY) использовать объект HTML Browser А вот этот интересно.. готовый текст будет в обьекте браузера? Если да, то это не подходит, дизайн запорется.. уж лучше весь текст белым чем белый фон
|
|
| |
YURIY | Дата: Понедельник, 15 Июня 2009, 01:09 | Сообщение # 25 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Nova) Если да, то это не подходит, дизайн запорется.. Не стоит забывать о том, что фон html-страницы можно сделать любым. И браузер будет смотреться как влитой в вашем проекте.
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Понедельник, 15 Июня 2009, 01:19 | Сообщение # 26 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Обидно, но с браузером штука не прокатит. Т.к. программа публичная, а Интернет Експлорер есть не у всех.
|
|
| |
YURIY | Дата: Понедельник, 15 Июня 2009, 01:37 | Сообщение # 27 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Ну хорошо. Тогда я бы попробовал динамически создавать текст. Вот небольшой пример: Code ** Предположим, что у нас 10 ников For i=1 To 10 ** Имя объекта текста поля "Ник:" name$='pole'+CHAR(i) ** Имя объекта текста поля "Имя_пользователя" nick$='user'+CHAR(i) ** Смещение каждой новой строки по координате Y y=i*15 ** Создаём поле "Ник:" CreateText("name$",",150,y,Ник:") ** Делаем его белым цветом SetObjectParam("name$","TEXTCOLOR=255,255,255") ** Создаём поле с самим ником CreateText("nick$",",200,y,Nova") ** Делаем его зелёным цветом SetObjectParam("nick$","TEXTCOLOR=0,255,0") Next i Так как такой список будет наверняка большим, тут уже будет нужна полоса прокрутки. Как сделать свою - смотрите проекты на сайте, такие есть. И ваш дизайн спасён!
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Понедельник, 15 Июня 2009, 02:50 | Сообщение # 28 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Ладно с этим. Проблема такая. Некоторые игроки используют в нике < и >. А отображаются они как и ... Оч прошу написать скрипт замены.. переменная с ником зовется a$..
Сообщение отредактировал Nova - Понедельник, 15 Июня 2009, 02:50 |
|
| |
YURIY | Дата: Понедельник, 15 Июня 2009, 02:58 | Сообщение # 29 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Nova) Оч прошу написать скрипт замены.. Опять-таки: Quote (Grand) Читай хелп по строковым функциям Quote (Справка) StrChange(Строка$,Найти$,Заменить$) Пояснение. Ищет в указанной строке подстроку Найти$, и заменяет ее подстрокой Заменить$. Возвращает измененную строку. Пример. Code string$='Властелин Колец' FromString$='Колец' ToString$='Пива' RetString$=StrChange(string$,FromString$,ToString$) Результатом этого кода будет следующий текст: Властелин Пива
Вечная память Андрею Сергееву!
|
|
| |
Nova | Дата: Понедельник, 15 Июня 2009, 15:15 | Сообщение # 30 |
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
| Хахах, и правда. Шестой час с прогой вожусь. Соображалка офф. Добавлено (15 Июнь 2009, 06:53) --------------------------------------------- Проблема! Список обновляется лишь однократно, приходится перезапускать прогу. Есть мысли? Я пол ночи бьюсь... Что только не пробовал! Не хочет обновляться. Видимо есть какой-то кеш, только я хз как его обнулить. Подскажите плиииз! Добавлено (15 Июнь 2009, 15:15) --------------------------------------------- И обнуление всех переменных не помогло.. Действительно странная проблема, никак не решить...
Сообщение отредактировал Nova - Понедельник, 15 Июня 2009, 11:33 |
|
| |