Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Объявление масивов в константах

тут можно задать вопрос по скриптингу
Post Reply
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Объявление масивов в константах

Post by Fullmetal8ender »

В паскале есть возможность объявить массив в константах.
Порою это очень удобно.
Выглядит это примерно так

Code: Select all

const
    List: array [1..5] of integer = (1,2,3,4,5);
Стулс ругаеться на двоеточие после названия массива и предлагает поставить туда равно.
Если так и сделать то ничего хорошего из этого не выходит.

Есть предложения по поводу?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

есть, попробуй другое название, уж очень смахивает на что-то из системного :)


да и равно насколько я помню тоже неплохо бы...

Code: Select all

const
rb_Main = $4F77778F;
P.S. Да и не ставятся в константах размерности массивов, да и сам массив не уверен что обьявляется - не помню уже, потом гляну
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

Ладно, подойдем к вопросу более конкретно.
Хочеться занести в масив ИД рунбуков.
Обьявлять массив в переменных и присваивать каждому значению определенное ИД долго и занимает много места.
А в константах можна просто перечислить значения массива, это удобно.
Вот как бы так сделать?

ПС в вашем примере я не увидел массива..а просто 1 константу
А тут нужен именно массив, что бы через цикл обращаться к разным его элементам.
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Post by CFA »

в константах не выйдет (может и выйдет, но я не смог), но можно инициализировать массив целиком, а не поэлементно - http://stealth.od.ua/forum/viewtopic.php?t=1075 последний пост
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

та это понятно...
var
vendor_types : array of word;


BEGIN
vendor_types:= [$0191, $0190, $0018, $0032,$85, $0001, $0002, $0011];

но это ж неинтересно :)

походу да, действительно нельзя в константах обьявлять массивы.
дэльфийская конструкция вида
remap : array [0..8] of Shortint=(7,6,5,0,-1,4,1,2,3);
не работает, как и писал автор.
что ж, это паскальскрипт, а не полноценный паскаль. придется вместо 1 строки писать 2 - обьявлять, а заполнять в программе второй строкой :)
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

Ну, я так и предполагал.
Надеюсь с типом даных cardinal оно работает.
Проверю....
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

а какая разница?
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

СКрипт компилируеться нормально, а вот при запуске выдает ошибку
5:17:55 [Kradun]: Compiling
15:17:55 [Kradun]: Compiled succesfully
15:17:55 [Kradun]: Could not call proc at 0.777
15:17:55 [Kradun]: Script n_m.sc stoped successfuly

кусочек кода тут

Code: Select all

var
i:integer;
b:array[1..6] of cardinal;

begin
b:=[$3197,$3194,$3195,$3193,$3198,$3192];

Если присваивать каждый элемент по отдельности то все работает.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

потом гляну, чего ему не нравится

если забуду - напомни :)
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Post by CFA »

при таком присваивании

Code: Select all

b:=[$3197,$3194,$3195,$3193,$3198,$3192];
предыдуще объявление массива

Code: Select all

b:array[1..6] of cardinal;
теряет силу, такие массивы индексируются с нуля, те массив будет уже такой

Code: Select all

b:array[0..5] of cardinal;
приведенный код работает без ошибок, ошибка где то дальше - идет обращение к элементу массива выходящего за границы, вероятно что-то типа b[6] или в цикл от 1 до 6, а надо от 0 до 5
Fullmetal8ender
Neophyte
Neophyte
Posts: 20
Joined: 27.07.2009 17:11

Post by Fullmetal8ender »

Совсем забыл что надо начинать с нуля!
Пасибо, щас проверим

если все переписать вот так:

Code: Select all

var
i:integer;
b:array of cardinal;

begin
b:=[$3197,$3194,$3195,$3193,$3198,$3192];
то всё работает (при условии что в теле программы мы используем массив b[0..5]

Большое спасибо всем!
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Vizit0r wrote:дэльфийская конструкция вида
remap : array [0..8] of Shortint=(7,6,5,0,-1,4,1,2,3);
не работает, как и писал автор.
Добавлю (на всякий случай) подтверждение этого. Такой вопрос давным-давно подымался на форуме паскаль скрипта и разработчики ответили, что такая конструкция не поддерживается.

Единственный момент: я не слежу за новыми версиями паскаль скрипта. Миралекс, как я понимаю, тоже не следит. Vizitor, наверное, тоже не следит. Так что есть вероятность, что уже есть какая-нибудь более свежая версия паскаль скрипта и она подобное держит... Надо проверять.

Счас глянул - последняя версия паскаль скрипта - 3.0.39.777, от мая этого года. Визитор, глянь, плиз на этот момент, может стоит свежий паскаль скрипт прикрутить. Шарится это все тут: http://www.remobjects.com/ps.aspx

Где у меня ссылка на форум по паскаль скрипту... хз. Потом найду. Или у Миралекса спросить, он должен знать.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

насколько я помню, в стелсе - февральский или что-то около того.
вряд ли там что-то сильно изменилось.

хотя в следующей версии прикручу, мало ли
Post Reply