Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Вопрос по списку
Вопрос по списку
AndreyДата: Понедельник, 01 Января 2007, 21:11 | Сообщение # 1
Новый участник
Группа: Проверенные
Сообщений: 26
Репутация: 0
Награды: 0
Статус: Offline
Здравствуйте, не так давно работаю с ММБ, но успел создать один проект. Но пришла необходимость его "проапгрейдить", вот тут я и застрял.
Суть в следующем: Имеется некий список IP-адресов компьютеров (загружающийся при старте страницы, при условии что не найден внешний список). И имеется эдитбокс, в котором можно задавать дополнительные параметры при подключении к одному из компьютеров списка. Фактически данная программа представляет собой эмуляцию командной строки. Например реализация её команды может выглядеть следующем образом: C:\Programs files\Proga.exe -t192.168.1.2 -n5 -w1000 -h700
То есть у меня в эдитбоксе по дефолту забиты некие параметры (например: -n5 -w1000 -h700) а из списка берется IP адрес машины и все это добро вместе запускается.
Вопрос в том как бы в IP список добавлять не IP-адреса машин, а их имена, комментариии и прочее.
Похожий вариант для себя я нашел на вашем сайте (называется base.mdb что то вроде базы данных на животных). Но там нету кнопки удалить, как я только не извращался, чтобы от туда можно было удалить запись и удалить корректно. То есть из списка (плейлиста) строку могу удалить, а удалить её из файла не получается. Единственное что получилось, это после удаления строки из списка, автоматически сохранялся файл, но сохранялся он, мягко говоря, коряво.
Вот пример:

Code
ListBoxGetSelectedItems("1","SelItemsArray$,NumSelItemsArray$,/,NumOfSelItems")
**Знак "/" как я понял является разделяющим в файле animals.txt он же делимитер "#" или я не прав?
numitem$=StrCopy(NumSelItemsArray$,1,1)
numitem=VAL(numitem$)
ListBoxDeleteItem("1","numitem")
ListBoxDeleteItem("list","numitem")  
Son gListSave("list","file$")
RunScript("Load2$")

На вашем примере base.zip я создал кнопку DELETE с запуском вышеупомянутого скрипта и еще один пустой список "list", что из этого получилось судите сами

 
as-masterДата: Вторник, 02 Января 2007, 11:59 | Сообщение # 2
Группа: Удаленные





Честно говоря, я так и не понял сути вопроса. То ли:

Quote
Вопрос в том как бы в IP список добавлять не IP-адреса машин,
а их имена, комментарии и прочее.

То ли:

Quote
можно было удалить запись и удалить корректно.

И что означает:

Quote
что из этого получилось судите сами

Если по первому варианту, то смотри пример Дополнительная информация из плейлиста -
http://www.mmbuilder.nm.ru/mmb-tiles.html

Если по второму вопросу - то пример Text Reader - http://www.mmbuilder.nm.ru/mmb-other.html,
там в список заносятся текстовые закладки и сделана возможность удаления их как из списка,
так и из файла.

И давайте, люди, научимся наконец формулировать вопрос четко и ясно, без лишних
эпистолярных изысков. Буквально одним предложением. Или по крайней мере выделяйте свой
вопрос каким-либо образом. Уважайте тех, кто должен отвечать на них и читать ваши
бессвязные посты, пытаясь разобраться, чего же все-таки хочет автор :)


Сообщение отредактировал as-master - Вторник, 02 Января 2007, 12:03
 
AndreyДата: Вторник, 02 Января 2007, 14:42 | Сообщение # 3
Новый участник
Группа: Проверенные
Сообщений: 26
Репутация: 0
Награды: 0
Статус: Offline
Здравствуйте еще раз
Quote (as-master)
И давайте, люди, научимся наконец формулировать вопрос четко и ясно, без лишнихэпистолярных изысков. Буквально одним предложением.

Вот суть вопроса:
Имеется проект: base.zip , как в данном проекте реализовать кнопку "Удалить", чтобы она удаляла не только из списка запись но и соответствующую строку из того файла, в котором это все прописано.
Формат файла следующий:
Черепаха/Пресмыкающиеся/400 кг/300 лет

Спасибо за внимание. Извиняюсь за предыдущий пост.
 
toizyДата: Вторник, 02 Января 2007, 16:40 | Сообщение # 4
Группа: Удаленные





Quote (Andrey)
чтобы она удаляла не только из списка запись но и соответствующую строку из того файла, в котором это все прописано

Вроде, в какой-то ветке мы обсуждали удаление одной строки из файла - mmbuilder.ru/forum/14-143-1
Может, поможет...
 
AndreyДата: Вторник, 02 Января 2007, 16:53 | Сообщение # 5
Новый участник
Группа: Проверенные
Сообщений: 26
Репутация: 0
Награды: 0
Статус: Offline
Админ MMB
Спасиб, буду разбираться
 
as-masterДата: Вторник, 02 Января 2007, 20:48 | Сообщение # 6
Группа: Удаленные





Quote (Andrey)
удаляла не только из списка запись но и соответствующую строку из того файла, в котором это все прописано.

Тогда еще раз советую посмотреть проект TextReader,
там как раз всё это реализовано. В том числе и то, что
обсуждалось в ветке форума, ссылку на которую дал toizy.

Добавлено (02 Января 2007, 20:48)
---------------------------------------------
Там удаляется именно одна строка в файле.
А вопрос с сохранением списка я как-то не рассматривал.
Наверное, можно и так, только тогда список нужно организовывать
соответствующим образом.

 
AndreyДата: Вторник, 02 Января 2007, 21:24 | Сообщение # 7
Новый участник
Группа: Проверенные
Сообщений: 26
Репутация: 0
Награды: 0
Статус: Offline
Здравствуйте еще раз, в общем посмотрел я ту ветку форума, которую мне посоветовал toizy, взял от туда последний скрипт под редакцией Rush'а, все хорошо, строка теперь удаляется и из списка и из файла, за это спасибо большое smile
НО: дело в том что в стартовой странице прописан скрипт:

Code
FileExist("<SrcDir>\CompList.txt","isExist")
If (isExist=1) Then
ListBoxAddItem("ListBox","<SrcDir>\CompList.txt")
Else
list$[1]='10.35.184.21'
list$[2]='10.35.188.104'
list$[3]='10.35.164.146'
list$[4]='10.35.164.145'
ListBoxAddItem("ListBox","list[]$")
End

И если в текущей директории не было файла CompList.txt загружается тот список, что прописан в скрипте, и после удаления одной или нескольких строк из списка программы, автоматически создается ПУСТОЙ файл CompList.txt
Как с этим бороться? Пока что я в стартовую страницу дописал, чтобы открывалось окно для сохранения списка, если его не существует, но вообще это не вариант.

Добавлено (02 Января 2007, 21:24)
---------------------------------------------
To as-master, вопрос по удалению строки решен, спасибо, TextReader я гляну, как время будет, может что еще придумаю, сразу напишу.

 
as-masterДата: Четверг, 04 Января 2007, 11:26 | Сообщение # 8
Группа: Удаленные





Quote (Andrey)
И если в текущей директории не было файла CompList.txt загружается тот список,
что прописан в скрипте, и после удаления одной или нескольких строк из списка программы,
автоматически создается ПУСТОЙ файл CompList.txt Как с этим бороться?

Ну поставь опять же условие, что если файл НЕ существует:

Code
FileExist("<SrcDir>\CompList.txt","isExist")

то не создавать файл при удалении строк - то есть не сохранять
список, или не писать строку в файл, или как там у тебя ещё...
 
AndreyДата: Суббота, 06 Января 2007, 22:29 | Сообщение # 9
Новый участник
Группа: Проверенные
Сообщений: 26
Репутация: 0
Награды: 0
Статус: Offline
Quote
Ну поставь опять же условие, что если файл НЕ существует:

Примерно так и сделал: вывожу в строке соответствующее сообщение. Спасибо.

В процессе работы воникло еще пара вопросов, правда не совсем по теме, модеры не серчайте.
1. Создано текстовое поле для ввода значений (целых чисел); как проверить, введено ли в него какое нибудь значение или оно осталось пустым.
2. Как проверить правильность ввода в другое текстовое поле IP адреса по маске ***.***.***.*** если такое конечно возможно.

 
YURIYДата: Суббота, 06 Января 2007, 23:56 | Сообщение # 10
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Andrey)
1. Создано текстовое поле для ввода значений (целых чисел); как проверить, введено ли в него какое нибудь значение или оно осталось пустым.

Code
If (EditBox$='') Then
   Message("Error!","")
End

Quote (Andrey)
2. Как проверить правильность ввода в другое текстовое поле IP адреса по маске ***.***.***.*** если такое конечно возможно.

Code
str$=EditBox$
For i=1 To 3
   a=POS(.,str$)
   If (a<>4) Then
     Message("Error!","")
     e=1
     Break()
   Else
     str$=StrDel(str$,1,4)
   End
Next i
If (i=3 & e<>1) Then
   b=LEN(str$)
   If (b<>3) Then
     Message("Error!","")
   End
End

Объяснять ничего не буду: есть русская справка и по-быстрому делал... Вариант 2 вообще, думаю, можно упростить, но работает.

Удачи!



Вечная память Андрею Сергееву!
 
AndreyДата: Воскресенье, 07 Января 2007, 16:55 | Сообщение # 11
Новый участник
Группа: Проверенные
Сообщений: 26
Репутация: 0
Награды: 0
Статус: Offline
Quote (Yuriy)
1. Создано текстовое поле для ввода значений (целых чисел); как проверить, введено ли в него какое нибудь значение или оно осталось пустым.

(EditBox$='') Then
Message("Error!","")
End


Спасибо, буду знать smile

Quote (Yuriy)
Объяснять ничего не буду: есть русская справка и по-быстрому делал... Вариант 2 вообще, думаю, можно упростить, но работает.

Удачи!

Не много изменил, поскольку в IP-адрес может быть вида ***.***.*.* например 192.168.1.2
str$=EditBox$
For i=1 To 3
a=POS(.,str$)

If (a>4) Then
Message("Error a>4","")

e=1
Break()
Else
str$=StrDel(str$,1,4)
End
Next i
If (i=3 & e<>1) Then
b=LEN(str$)

If (b>3) Then
Message("Error b>3","")

End
End

Правда не мой и не Ваш, Yuriy, скрипт не может проверить количество цифр после последней точки.
К тому же IP адрес не может превышать 255.255.255.255 Если отталкиваться от этого, то тогда, наверно, можно и не пересчитывать количество цифр, после которых должна стоять точка?
К сожалению я пока плохо владею скриптами, чтобы суметь написать что либо подобное, поэтому уповаю только на вашу помощь, форумчане.

 
YURIYДата: Воскресенье, 07 Января 2007, 20:19 | Сообщение # 12
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (Andrey)
Правда не мой и не Ваш, Yuriy, скрипт не может проверить количество цифр после последней точки.

Неправда!

Code
If (i=3 & e<>1) Then  
    b=LEN(str$)  
    If (b<>3) Then  
      Message("Error!","")  
    End  
End

Здесь ведь чётко видно: если последние символы меньше 3х, то БАБАХ! smile

Quote (Andrey)
К сожалению я пока плохо владею скриптами, чтобы суметь написать что либо подобное, поэтому уповаю только на вашу помощь, форумчане.

Ну, ребята... Так мы могли сказать пол года назад. А сейчас? Справка русская есть? Есть. В чём проблема? Изучаем строковые функции и ву-аля!

Quote (Andrey)
К тому же IP адрес не может превышать 255.255.255.255 Если отталкиваться от этого, то тогда, наверно, можно и не пересчитывать количество цифр, после которых должна стоять точка?

Хорошо, тогда сценарий будет следующий - упростил его причём, на свежую голову ведь делал (пишу с комментариями, чтобы понятно было):

Code
**Завожу свою переменную и на конце точку делаю,  
**чтобы потом лишнее условие не делать(как в прошлом скрипте):
str$=EditBox$+'.'
**Пускаем цикл 4 раза
For i=1 To 4
**Ищем точку
   a=POS(.,str$)
**Если с точкой не больше 4х символов (ведь IP может быть от 1 до 3х + точка = 4),
**Удаляем для себя эту часть строки и идём дальше, если больше - завершаем цикл
**и сообщаем ошибку:
   If (a>=5) Then
     Message("Error!","")
     Break()
   Else
     str$=StrDel(str$,1,4)
   End
Next i

Теперь идёт?

И научитесь наконец пользоваться тегами 'code' для вставки скриптов! Или злиться буду.



Вечная память Андрею Сергееву!
 
VictorДата: Воскресенье, 07 Января 2007, 21:32 | Сообщение # 13
MMB Club
Группа: Проверенные
Сообщений: 15
Репутация: 1
Награды: 0
Статус: Offline
Этот скрипт не допускает превышения 255 и неправильного заполнеия поля.
Code
str$=EditBox$
For i=1 To 3
   a=POS(.,str$)
   RetString$=StrDel(str$,a,12)
   RetString=VAL(RetString$)
   If (RetString=0|RetString>255) Then
     Message("Error 255","")
   End
   str$=StrDel(str$,1,a)
Next i
RetString=VAL(str$)
If (RetString=0|RetString>255) Then
   Message("Error 255","")
End
 
YURIYДата: Воскресенье, 07 Января 2007, 21:55 | Сообщение # 14
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Victor, тогда уже так:

Code
str$=EditBox$+'.'
For i=1 To 4
   a=POS(.,str$)
   b=VAL(StrCopy(str$,1,a))
   If (b=0 | b>255) Then
     Message("Error!","")
     Break()
   Else
     str$=StrDel(str$,1,a)
   End
Next i

Зачем лишние строки кода писать?



Вечная память Андрею Сергееву!
 
AndreyДата: Понедельник, 08 Января 2007, 14:40 | Сообщение # 15
Новый участник
Группа: Проверенные
Сообщений: 26
Репутация: 0
Награды: 0
Статус: Offline
Quote (Yuriy)
Ну, ребята... Так мы могли сказать пол года назад. А сейчас? Справка русская есть? Есть. В чём проблема? Изучаем строковые функции и ву-аля!

А как же, только с ней я и расшифровывал Ваши скрипты smile
Quote (Yuriy)
Victor, тогда уже так:
Code
str$=EditBox$+'.'
For i=1 To 4
  a=POS(.,str$)
  b=VAL(StrCopy(str$,1,a))
  If (b=0 | b>255) Then
   Message("Error!","")
   Break()
Else
   str$=StrDel(str$,1,a)
  End
Next i

Зачем лишние строки кода писать?


Последняя редакция скрипта работает как часы, проверил все что можно, находит все ошибки!

Quote (Yuriy)
И научитесь наконец пользоваться тегами 'code' для вставки скриптов! Или злиться буду.

Не вопрос!

ЗЫ: Еще раз спасибо за все.

 
Форум MMB » Всё о программе Multimedia Builder » Общие вопросы по MMB » Вопрос по списку
  • Страница 1 из 1
  • 1
Поиск: