Вопрос по списку
|
|
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'а, все хорошо, строка теперь удаляется и из списка и из файла, за это спасибо большое НО: дело в том что в стартовой странице прописан скрипт: 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 | Спасибо, буду знать 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х, то БАБАХ! 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) | Ну, ребята... Так мы могли сказать пол года назад. А сейчас? Справка русская есть? Есть. В чём проблема? Изучаем строковые функции и ву-аля! | А как же, только с ней я и расшифровывал Ваши скрипты 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' для вставки скриптов! Или злиться буду. | Не вопрос! ЗЫ: Еще раз спасибо за все.
|
|
| |