Форум
Написать нам
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: as-master  
Чтение из файла на сервере и парсинг
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)
К примеру, на сервере я буду создавать файл, в котором все описывается, и в дальнейшем буду вносить изменения. Необходимо научить мой проект считывать информацию с этого файла!

Тебе нужен плагин лови в прикреплении, он может закачивать с сервера любые файлы, но не записывать!
Прикрепления: Internet.zip (70.2 Kb)
 
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
Неа. Это сообщение почему-то такоевышло, в скрипте ошибок нету.
Прикрепления: 3022248.jpg (468.4 Kb)


Сообщение отредактировал 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)
в отсутствии логического мышления

Это нормально :) Тем более, если вы только начали заниматься программированием. Думаю, маленький пример выше даст вам некоторую точку, от которой нужно отталкиваться дальше!

Удачи! thumbs_up



Вечная память Андрею Сергееву!
 
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

А вот этот интересно.. готовый текст будет в обьекте браузера? Если да, то это не подходит, дизайн запорется.. уж лучше весь текст белым чем белый фон %)

:D

 
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

Так как такой список будет наверняка большим, тут уже будет нужна полоса прокрутки. Как сделать свою - смотрите проекты на сайте, такие есть.

И ваш дизайн спасён! thumbs_up



Вечная память Андрею Сергееву!
 
NovaДата: Понедельник, 15 Июня 2009, 02:50 | Сообщение # 28
Любопытный
Группа: Проверенные
Сообщений: 31
Репутация: 0
Награды: 0
Статус: Offline
Ладно с этим. Проблема такая. Некоторые игроки используют в нике < и >. А отображаются они как
Code
& lt;
и
Code
& gt;
...
Оч прошу написать скрипт замены.. переменная с ником зовется 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
 
  • Страница 1 из 4
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: