puhpol
- Стаж: 10 лет
- Сообщений: 892
- Репутация:75[+] [-]
|
Приветствую Господа! Я не по теме: Прикольно, вам идею подкинуть - и понеслась езда по кочкам....... В итоге программку мини инстал нарисовали. Спасибо огромное наши старшие братья! И вам полезно, и мы учимся.
|
nikzzzz
- Стаж: 9 лет
- Сообщений: 3114
- Репутация:127[+] [-]
|
conty9,74058Просто экономия памяти, выделяемой под переменную. Я считал, что переменные хранятся только в виде строки, как например в батниках, а то, что они имеют тип, не знал.
|
Отправлено: 18-Фев-2020 16:11
(спустя 1 час 6 минут)
|
nikzzzz, команда CALC, в отличие от ENVI, хранит только число. Хотя и ENVI можно использовать для ввода числового значения, но это нерационально. CALC может хранить число как целое, обычной точности и удвоенной точности. А ENVI вначале присваивает символы числа, и только при арифметических действиях преобразует значение в число обычной точности. И, кстати, ещё один нюанс: после арифметических операций с визуально заданными целыми числами (т.е., если мы не используем #) результатом может быть реальное число обычной точности. 3+5=7.999999999 - как-то так. Просто используются разные подпрограммы рассчёта. Другой пример: операции x*x и x в квадрате обрабатываются по разному, первая намного быстрее (умножение), вторая медленно (вознесение в степень). Хотя результат практически идентичен.
|
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1324
- Репутация:127[+] [-]
|
74062обычной точности и удвоенной точности обычно есть типы Integer целое и Double с мантисой, с в 2 раза большей шириной, допустим 8 байт против 4-х. В PureBasic описание типа для double:Типы данных с плавающей запятой (float и double) предназначены для хранения положительных и отрицательных чисел с плавающей запятой. Число с плавающей запятой хранится в форме мантиссы (значение числа без учёта порядка), и показателя степени (порядка). При этом число с плавающей запятой имеет фиксированную относительную точность и изменяющуюся абсолютную. Преимущество представления чисел в формате с плавающей запятой над представлением в формате с фиксированной запятой (и целыми числами) состоит в том, что можно использовать существенно больший диапазон значений при неизменной относительной точности. В то же время невозможно сохранить очень большое число с высокой точностью. В AutoIt3 в такой ситуации "3+5=7.999999999" типа есть микропрограмма которая исправляет эту проблему. В Integer дробная часть числа отсекается и вычисления неправильные, возможно AutoIt3 вычисляет всегда double и корректирует.
|
|
AZJIO, тут так же - обычной точности с плавающей запятой и удвоенной. Вроде 8 и 16 байт, точно не помню. Коррекция тоже есть, но после некоторых операций не срабатывает, я такое встречал, хоть и нечасто. Поэтому и рекомендую при работе с целыми числами использовать CALL #... Так и расход памяти меньше, и обработка быстрее (хотя на современном оборудовании что 1нс, что 100нс - незаметно), и результат нужный.
|
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1324
- Репутация:127[+] [-]
|
74077Вроде 8 и 16 байт, точно не помню посмотрел типы данных С++, там тоже максимальный тип данных 8 байт даже для x64. Я про то что какой бы новый язык не был придуман, он использует микрокоманды ассемблера и тип данных повторяет основные стандарты.
|
puhpol
- Стаж: 10 лет
- Сообщений: 892
- Репутация:75[+] [-]
|
Приветствую Господа! Добрался наконец до вот этого сообщения:74053nikzzzz, раз пошла такая пьянка, тогда уже лучше читать данные из внешнего файла конфига. Для примера, если наша утиль будет иметь имя MySetup.exe, тогда конфиг MySetup.cfg Читаем конфигCALC #i=0 //Переменная для подсчета количества программ CALC #NEnvi=0 //Переменная для перебора строк FNAM TEnvi=%MyName% //Получаем в TEnvi имя запущенного файла ENVI TEnvi=%TEnvi%.cfg //Генерируем имя конфига (имя файла с расширением cfg) IFEX %CurDir%\%TEnvi%, //Если найден конфиг {* READ %CurDir%\%TEnvi%,*r,DataCFG //Читаем содержимое конфига в переменную DataCFG READ -,-1,DEnvi,%DataCFG% //Считаем количество строк в конфиге LOOP #%NEnvi%<%DEnvi%, //Цикл чтения из конфига {* READ -,%NEnvi%,XEnvi,%DataCFG% //Читаем в XEnvi строку %NEnvi% CALC #NEnvi=%NEnvi%+1 //Увеличиваем номер строки MSTR -delims:# TEnvi=<4>%XEnvi% //Читаем в переменную TEnvi последнее слово строки FIND $%TEnvi%<>, //Если последнее слово есть, тогда {* CALC #i=%i%+1 //Увеличиваем количество программ MSTR -delims:# Name%i%,StartType%i%,InstString%i%,InstTime%i%=<1*>%XEnvi% //Вносим значения из строки в переменные (разделителем значений служит символ #) MESS %Name%i%%,%StartType%i%%,%InstString%i%%,%InstTime%i%% //Индикация для теста } } ! EXIT //Если конфиг не найден, выход из программыЕсли совместить с демкой от nikzzzzCALC #i=0 CALC #NEnvi=0 FNAM TEnvi=%MyName% ENVI TEnvi=%TEnvi%.cfg IFEX %CurDir%\%TEnvi%, {* READ %CurDir%\%TEnvi%,*r,DataCFG READ -,-1,DEnvi,%DataCFG% LOOP #%NEnvi%<%DEnvi%, {* READ -,%NEnvi%,XEnvi,%DataCFG% CALC #NEnvi=%NEnvi%+1 MSTR -delims:# TEnvi=<4>%XEnvi% FIND $%TEnvi%<>, {* MSTR -delims:# Name[%i%],StartType[%i%],InstString[%i%],InstTime[%i%]=<1*>%XEnvi% CALC #i=%i%+1 } } ! EXIT //---------------------------------------------------------------- //%n% - к-во пунктов меню calc #n=%i% //Вычисляем размер окна calc w=400 calc h=int(%n%/2)*20 + 170 //Создаем основное окно @Windows %w% %h% exit _sub Windows,w%1h%2,Установка программ,, // Размер основного окна и его название. labe Label1,l10t10w%1h20,Выберите программы для установки ,,0xaaaaaa,16 // Местоположение надписи, цвет,размер шрифта. //Инфо calc l=15 calc t=int(%n%/2)*20 + 64 labe Label2,l%l%t%t%w%1h20,====== Привет ====== //Создаем в цикле Чек боксы envi i=0 loop %i%<%n%, { calc l=mod(%i%,2)*205 + 15 calc t=int(%i%/2)*20 + 40 chek Chk[%i%],l%l%t%t%w150h20,%Name[%i%]%,,1 // Чек бокс и его местоположение в окне + Имя программы calc i=%i% + 1 } //Кнопки calc l=15 calc t=int(%n%/2)*20 + 108 item Button1,l%l%t%t%w100h24,Выбрать все,Sel 1 // местоположение кнопки "выбрать все" calc l=120 item Button2,l%l%t%t%w100h24,Снять выбор,Sel 0 // местоположение кнопки "снять выбор" calc l=280 item Button3,l%l%t%t%w100h24,Установить,Install // местоположение кнопки "Установить" calc l=15 calc t=int(%n%/2)*20 + 84 pbar Pbar,l%l%t%t%w365h20,, // Прогрес бар и его место положение в окне _end _sub Sel envi i=0 loop %i%<=%n%, { envi @Chk[%i%].Check=%1 calc i=%i% + 1 } _end _sub CheckSel //Вычисляем общее время выполнения выбранных пунктов envi SummaryTime=0 envi i=0 loop %i%<=%n%, { ifex $%Chk[%i%].Check%=1,calc SummaryTime=%SummaryTime% + %InstTime[%i%]% calc i=%i% + 1 } _end _sub Install mess Установить выбранные приложения?@#YN find $%YESNO%=YES, { envi @Pbar=0 CheckSel envi CurrentTime=0 envi i=0 loop %i%<=%n%, { ifex $%Chk[%i%].Check%=1, { envi @Label2=*** Установка %Name[%i%]% *** exec %StartType[%i%]% %InstString[%i%]% calc CurrentTime=%CurrentTime% + %InstTime[%i%]% calc Percent=%CurrentTime%/%SummaryTime%*100 envi @Pbar=%Percent% envi @Chk[%i%].Check=0 } calc i=%i% + 1 } envi @Label2=*** Все задания выполнены !!! *** } _endПримерное содержимое конфиг-а7-zip#-wait#%CurDir%\prog\Proga1.cmd#1 Моя программа#-wait#%CurDir%\prog\Proga2.cmd#5 ===========Основные программы================= Проверка#-wait#%CurDir%\prog\Proga3.cmd#2 -------------Дополнительно-------------------- Тест#-wait#%CurDir%\prog\Proga4.cmd#7 Proga5#-wait#%CurDir%\prog\Proga5.cmd#2В конфиге допускаются некорректные строки (т.е., пустые строки, или строки, в которых отсутствует значение после трёх символов "#") - все они будут просто проигнорированы. Разделителем служит символ "#", и, соответственно, он не должен присутствовать ни в пути, ни в имени программ. Если подправить код, можно использовать некоторые другие разделители, например, "^","&","*". Прикольная история. Но маленько не работает... При первом запуске скрипта получил вот это: . Ладно вроде исправил - в 38 строке исправил chek Chk[%i%],l%l%t%t%w150h20,%Name[%i%]%,,1 // Чек бокс и его местоположение в окне + Имя программы на chek Chk[%i%],l%l%t%t%w150h20,%Name%i%%,,1 // Чек бокс и его местоположение в окне + Имя программы Появились названия программ но почему то первый чекбокс имя программы не выводит. . И еще не понятно зачем в конфиг файле выделенное значение? Тест#-wait#%CurDir%\prog\Proga4.cmd#7 Добавлено через 22 минуты 1 секунда: Если изменить количество строк в конфиге, первая имя не читает.... И кнопки не правильно работают.... Добавлено через 1 час 31 минута 5 секунд: Я ДИКО ИЗВИНЯЮСЬ, похоже сам поламал....
|
puhpol
- Стаж: 10 лет
- Сообщений: 892
- Репутация:75[+] [-]
|
Точно, все сам сломал.... Все работет. Добавлено через 58 секунд: avalat, Приветствую! Это мои рученки шаловливые.....
|
Отправлено: 25-Фев-2020 18:11
(спустя 2 часа 58 минут)
|
74282зачем в конфиг файле выделенное значение? Тест#-wait#%CurDir%\prog\Proga4.cmd#7 7 - это условное время выполнения для Прога4. Можно измерять в секундах, минутах или в попугаях. Т.е., просто вклад в общее время установки.
|
puhpol
- Стаж: 10 лет
- Сообщений: 892
- Репутация:75[+] [-]
|
conty9, Приветствую! Понял.
|
bnn17
- Стаж: 4 года 8 месяцев
- Сообщений: 41
- Репутация:0[+] [-]
|
conty9 MySetup.cfg - MySetup.exe. Скрипт "Если совместить с демкой от nikzzzz" Программы не инсталлируются. Галочки ставятся и снимаются. Программы exe,cmd, msi не запускаются. Программа виснет. в скрипте от "puhpol" проблем нет, инсталляция своих программ проходит успешно. Может в скрипте надо что-то добавить?
|
bnn17
- Стаж: 4 года 8 месяцев
- Сообщений: 41
- Репутация:0[+] [-]
|
conty9, puhpol Подпрограмма из скрипта conty9SUB_SEL_sub Sel envi i=0 loop %i%<=%n%, { envi @Chk[%i%].Check=%1 calc i=%i% + 1 } _end Переместил подпрограмму вниз, другие подпрограммы запустились. Выражение envi @Chk[%i%].Check=%1 тормозит другие подпрограммы.
|
Отправлено: 08-Мар-2021 19:41
(спустя 1 день 4 часа)
|
bnn17, обычно такое происходит, если косяки с парами _sub Sel ... _end, т.е., имеется лишний _end или _sub. Выложи, скрипт, который глючит.
|
Страница 2 из 3
Текущее время: 03-Дек 20:33
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|