[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Приветствую Господа! aa Я не по теме:
Прикольно, вам идею подкинуть - и понеслась езда по кочкам.......
В итоге программку мини инстал нарисовали. ay
Спасибо огромное наши старшие братья! И вам полезно, и мы учимся. az

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
conty9,
74058Просто экономия памяти, выделяемой под переменную.
Я считал, что переменные хранятся только в виде строки, как например в батниках, а то, что они имеют тип, не знал.

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
nikzzzz, команда CALC, в отличие от ENVI, хранит только число. Хотя и ENVI можно использовать для ввода числового значения, но это нерационально. CALC может хранить число как целое, обычной точности и удвоенной точности. А ENVI вначале присваивает символы числа, и только при арифметических действиях преобразует значение в число обычной точности. И, кстати, ещё один нюанс: после арифметических операций с визуально заданными целыми числами (т.е., если мы не используем #) результатом может быть реальное число обычной точности.
3+5=7.999999999 - как-то так.
Просто используются разные подпрограммы рассчёта. Другой пример: операции x*x и x в квадрате обрабатываются по разному, первая намного быстрее (умножение), вторая медленно (вознесение в степень). Хотя результат практически идентичен.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Profvit,
74072только ленивый на ее основе
Именно от лени все и идет, лениво перетачивать чужой инструмент под себя, да и еще и разбираться с ним, куда проще сделать свой. ab

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1264
  • Репутация:127

    [+] [-]
74062обычной точности и удвоенной точности
обычно есть типы Integer целое и Double с мантисой, с в 2 раза большей шириной, допустим 8 байт против 4-х. В PureBasic описание типа для double:
Типы данных с плавающей запятой (float и double) предназначены для хранения положительных и отрицательных чисел с плавающей запятой. Число с плавающей запятой хранится в форме мантиссы (значение числа без учёта порядка), и показателя степени (порядка). При этом число с плавающей запятой имеет фиксированную относительную точность и изменяющуюся абсолютную. Преимущество представления чисел в формате с плавающей запятой над представлением в формате с фиксированной запятой (и целыми числами) состоит в том, что можно использовать существенно больший диапазон значений при неизменной относительной точности. В то же время невозможно сохранить очень большое число с высокой точностью.
В AutoIt3 в такой ситуации "3+5=7.999999999" типа есть микропрограмма которая исправляет эту проблему. В Integer дробная часть числа отсекается и вычисления неправильные, возможно AutoIt3 вычисляет всегда double и корректирует.

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
AZJIO, тут так же - обычной точности с плавающей запятой и удвоенной. Вроде 8 и 16 байт, точно не помню. Коррекция тоже есть, но после некоторых операций не срабатывает, я такое встречал, хоть и нечасто. Поэтому и рекомендую при работе с целыми числами использовать CALL #... Так и расход памяти меньше, и обработка быстрее (хотя на современном оборудовании что 1нс, что 100нс - незаметно), и результат нужный.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1264
  • Репутация:127

    [+] [-]
74077Вроде 8 и 16 байт, точно не помню
посмотрел типы данных С++, там тоже максимальный тип данных 8 байт даже для x64. Я про то что какой бы новый язык не был придуман, он использует микрокоманды ассемблера и тип данных повторяет основные стандарты.

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Приветствую Господа! aa
Добрался наконец до вот этого сообщения:
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 //Если конфиг не найден, выход из программы

Если совместить с демкой от nikzzzz

CALC #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 секунд:
Я ДИКО ИЗВИНЯЮСЬ, похоже сам поламал.... ah

[Цитировать]

    avalat
  • 222
  • Стаж: 9 лет 2 месяца
  • Сообщений: 450
  • Репутация:127

    [+] [-]
puhpol,
Проверил, у меня всё нормально. Можно на конфиг посмотреть ?

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Точно, все сам сломал.... Все работет. ah
Добавлено через 58 секунд:
avalat, Приветствую! aa
Это мои рученки шаловливые.....

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
74282зачем в конфиг файле выделенное значение?
Тест#-wait#%CurDir%\prog\Proga4.cmd#7
7 - это условное время выполнения для Прога4. Можно измерять в секундах, минутах или в попугаях. Т.е., просто вклад в общее время установки.

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
conty9, Приветствую! aa Понял.

[Цитировать]

    bnn17
  • 24171
  • Стаж: 4 года
  • Сообщений: 32
  • Репутация:0

    [+] [-]
conty9
MySetup.cfg - MySetup.exe. Скрипт "Если совместить с демкой от nikzzzz" Программы не инсталлируются. Галочки ставятся и снимаются. Программы exe,cmd, msi не запускаются. Программа виснет.
в скрипте от "puhpol" проблем нет, инсталляция своих программ проходит успешно.
Может в скрипте надо что-то добавить?

[Цитировать]

    bnn17
  • 24171
  • Стаж: 4 года
  • Сообщений: 32
  • Репутация:0

    [+] [-]
conty9, puhpol
Подпрограмма из скрипта conty9

SUB_SEL

_sub Sel
envi i=0
loop %i%<=%n%,
{
envi @Chk[%i%].Check=%1
calc i=%i% + 1
}
_end
Переместил подпрограмму вниз, другие подпрограммы запустились.
Выражение envi @Chk[%i%].Check=%1 тормозит другие подпрограммы.

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
bnn17, обычно такое происходит, если косяки с парами _sub Sel ... _end, т.е., имеется лишний _end или _sub. Выложи, скрипт, который глючит.

Страница 2 из 3


Показать сообщения:    

Текущее время: 29-Мар 14:04

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы