:: Visual Foxpro, Foxpro for DOS
Re: Проблема с массивами
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
dimuhametov
Наверно проблема с мифическим однобайтным счетчиком.

Ну не знаю, обычно, если в программе проявляются какие-то чудеса - это не сверхъестественное что-то, а вполне обычное, возможно даже очень простое окажется в итоге.
Вот если взять например заполнение массива - он что реально у тебя после создания заполняется в цикле? Или таки нет?
Если нет, то возможно например просто (где-то как-то по каким-то причинам) не заполняется полностью.
И поскольку при создании все его элементы прописываются как .F. - какие-то проблемы именно с не заполненными элементами.
Ну или что-то в таком роде.
Если же ошибка повторима даже на приведенном куске кода в среде - глянуть для начала хотя бы все текущие переменные и установки среды. Меняя их в крайнем случае на пробу. Ну уж слишком уж какая-то очевидная элементарная вещь в данном случае, чтобы такой глюк имел какое-то "уважительное" обоснование, не связанное с чем-то вполне конкретным.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
Crispy
dimuhametov
Наверно проблема с мифическим однобайтным счетчиком.

Ну не знаю, обычно, если в программе проявляются какие-то чудеса - это не сверхъестественное что-то, а вполне обычное, возможно даже очень простое окажется в итоге.
Вот если взять например заполнение массива - он что реально у тебя после создания заполняется в цикле? Или таки нет?
Если нет, то возможно например просто (где-то как-то по каким-то причинам) не заполняется полностью.
И поскольку при создании все его элементы прописываются как .F. - какие-то проблемы именно с не заполненными элементами.
Ну или что-то в таком роде.
Если же ошибка повторима даже на приведенном куске кода в среде - глянуть для начала хотя бы все текущие переменные и установки среды. Меняя их в крайнем случае на пробу. Ну уж слишком уж какая-то очевидная элементарная вещь в данном случае, чтобы такой глюк имел какое-то "уважительное" обоснование, не связанное с чем-то вполне конкретным.
Массив как хочешь создавай, хоть через цикл, хоть по элементам отдельным заполняй значение, или через APPEND FROM, результат один - с проблемой описанной выше. А "уважительное" обоснование для глюка - звучит !


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
Нашел пока некоторое работающее решение:
CLEAR all
RELEASE ALL
LOCAL ARRAY cArray[300,1]
cArray = .F.
FOR m.jk1=1 TO 300
cArray[m.jk1]=TRANSFORM(m.jk1)
ENDFOR
? cArray[254] && 254
? cArray[255] && 255
? cArray[256] && 256
? cArray[257] && 257
? "&cArray[254]" && 254
? "&cArray[255]" && 255
? "&cArray[256,1]" && 256
? "&cArray[257,1]" && 257
? "&cArray[301,1]" && &cArray[301,1]


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Gump

Сообщений: 904
Дата регистрации: 06.09.2019
Если больше ни у кого не воспроизводится, то стоит грешить на систему, других вариантов не очень видно.
Попробуй на виртуалке воспроизвести.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Удалил. Думаю дальше.



Исправлено 1 раз(а). Последнее : pasha_usue, 15.10.19 16:15
Ratings: 0 negative/0 positive
Re: Проблема с массивами
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
Ну а если все таки как Penner предлагает а потом пройти в отладчике и посмотреть как он меняется после каждого шага?

CLEAR
LOCAL ARRAY cArray[300]
cArray = ''
FOR m.jk=1 TO 300
cArray[m.jk]=TRANSFORM(m.jk)
ENDFOR
? cArray[254] && 254 - Īź
? cArray[255] && 255 - Īź
? cArray[256] && 256 - Īź
? cArray[257] && 257 - Īź
? "&cArray[254]" && 254 - Īź
? "&cArray[255]" && 255 - Īź
? "&cArray[256]" && &cArray[256] - ļšīįėåģą
? "&cArray[257]" && &cArray[257] - ļšīįėåģą



Исправлено 2 раз(а). Последнее : _vit, 15.10.19 17:39
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
_vit
Ну а если все таки как Penner предлагает а потом пройти в отладчике и посмотреть как он меняется после каждого шага?
CLEAR
LOCAL ARRAY cArray[300]
cArray = ''
FOR m.jk=1 TO 300
cArray[m.jk]=TRANSFORM(m.jk)
ENDFOR
? cArray[254] && 254 - Īź
? cArray[255] && 255 - Īź
? cArray[256] && 256 - Īź
? cArray[257] && 257 - Īź
? "&cArray[254]" && 254 - Īź
? "&cArray[255]" && 255 - Īź
? "&cArray[256]" && &cArray[256] - ļšīįėåģą
? "&cArray[257]" && &cArray[257] - ļšīįėåģą

cArray = '' к сожалению не помог. Ошибки те же.


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
Ну а как выглядит массив в отладчике?
После LOCAL ARRAY cArray[300] ?
После cArray = '' ?
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
_vit
Ну а как выглядит массив в отладчике?
После LOCAL ARRAY cArray[300] ?
После cArray = '' ?
выглядит обычно, каждому элементу присвоена пустая строка


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Starpom

Сообщений: 71
Дата регистрации: 29.06.2006
Почему то у меня в памяти осталась мысль что еще со времен ДОСовского Foxpro конструкция использования переменных m. ограниченно по умолчанию 255, но как снимается это ограничение не помню.
Весь FOX изначально построен на магической цифре 256. До 255 - это использование пользователем, а вот 256 - это служебное.
Если Вы уберет конструкцию переменной m., то скорее всего массив будет работать стабильно.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
Хорошо.
Если так:

CLEAR
LOCAL ARRAY cArray[300]
cArray = '8'
...

Останавливаешься в отладчике после cArray = '8'

В окне Locals у тебя все элементы массива cArray имеют значение '8'. Так?

В окне Watch cArray[256] = '8' ?

Вводишь в окно Commands
? cArray[256]
Каков результат?
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
_vit
Хорошо.
Если так:

CLEAR
LOCAL ARRAY cArray[300]
cArray = '8'
...

Останавливаешься в отладчике после cArray = '8'

В окне Locals у тебя все элементы массива cArray имеют значение '8'. Так?

В окне Watch cArray[256] = '8' ?

Вводишь в окно Commands
? cArray[256]
Каков результат?
ВСЕГДА 8


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
dimuhametov
Нашел пока некоторое работающее решение:

Кстати да.
Припоминается, бывали когда-то случаи, когда подробное указание именно в параметрах и строк, и столбцов, пусть даже для однострочного массива, позволяло получать то, что нужно.
Хотя по умолчанию вроде бы можно и не указывать, но именно указание иногда бывает помогает.
Про "уважительный" же глюк же - я имел в виду, что это нога, чья надо нога какой-то вполне однозначный глюк среды, ну или хотя бы допустим системы.

Вообще говоря, предпочитаю всегда использовать DIMENSION для создания массива. Как-то она "более", на мой взгляд.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 2 раз(а). Последнее : Crispy, 16.10.19 13:18
Ratings: 0 negative/0 positive
Re: Проблема с массивами
dimuhametov
Автор

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
Crispy
Вообще говоря, предпочитаю всегда использовать DIMENSION для создания массива. Как-то она "более", на мой взгляд.
DIMENSION никак не помог, хоть один хоть с local array.


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
dimuhametov
Crispy
Вообще говоря, предпочитаю всегда использовать DIMENSION для создания массива. Как-то она "более", на мой взгляд.
DIMENSION никак не помог, хоть один хоть с local array.

Ну по идее, раз уж помогло явное указание обоих параметров, видимо это один из тех исключительных случаев, когда именно так и стоит делать.
У меня тоже когда-то пару раз бывало похожее, когда именно такое помогало, т.е. даже несмотря на способ объявления. Хотя и другая ситуация конечно была, подробно сейчас не вспомнить, но тем не менее.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Проблема с массивами
_vit

Сообщений: 5175
Дата регистрации: 29.07.2002
dimuhametov
_vit
Хорошо.
Если так:

CLEAR
LOCAL ARRAY cArray[300]
cArray = '8'
...

Останавливаешься в отладчике после cArray = '8'

В окне Locals у тебя все элементы массива cArray имеют значение '8'. Так?

В окне Watch cArray[256] = '8' ?

Вводишь в окно Commands
? cArray[256]
Каков результат?
ВСЕГДА 8

Ну значит массив создается правильно а портится в цикле.
Надо пройти цикл в отладчике по шагам и посмотреть как меняются значения cArray[m.jk] на каждой итерации.

FOR m.jk=255 TO 300
cArray[m.jk]=TRANSFORM(m.jk)
ENDFOR
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
dimuhametov
прошу не ругать за конструкцию типа "&cArray[256]" (такая необходимость).
Нет такой необходимости. Всегда можно обойтись без макро - результат надёжнее, проще и предсказуемее.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Проблема с массивами
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Пример, когда макрос помогает. "Так программировать нельзя", но эта хрень "макрос" часто выручает, когда нельзя код причесать хорошо

PARAMETERS par1, par2
m.u = m.par1 && ...это условие прилетело сверху программы
m.v = m.par2 && что-то, типа C или N, прилетело вместе с условием
x = IIF(m.u, "VAL", "STR")
y = &x(m.v) && если условие U и значение V соответствуют друг другу, то ошибки не возникнет, что пришло на вход программы расчитать бывает невозможно

Про TYPE и VARTYPE не говорить, этот пример искусственный.



Исправлено 2 раз(а). Последнее : of63, 16.10.19 23:17
Ratings: 0 negative/0 positive
Re: Проблема с массивами
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
Пример, когда макрос помогает. "Так программировать нельзя", но эта хрень "макрос" часто выручает, когда нельзя код причесать хорошо
Про TYPE и VARTYPE не говорить, этот пример искусственный.
Это совершенно очевидный пример говнокода. Единственно в чём он помогает - это в том чтобы запутать логику и чтобы читающий код программист сломал себе мозг. Макро в этом случае не нужен вообще.
x = IIF(m.u, "VAL", "STR")
y = &x(m.v)
Заменяется на
x = IIF(m.u, VAL(m.v), STR(m.v))
Или на чуть более многословный
IF m.u
x = VAL(m.v)
ELSE
x = STR(m.v)
ENDIF


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Проблема с массивами
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Ястно, Игорь, с говнокодом и говнобизнеслогикой ты не сталкивался (ну нашел недочеты в тупости моего примера, пример тупости своих "жизненных" ситуаций не привел), причесал мой код в том виде (а он абстрактный!, там м.б. много условий по переменной U, сложных, и не выражаемых...) не буду оправдываться! Тебе надо приводить только пример задачи математически нерешаемой, как теорему Ферма (№?), или из задач Гильберта (№?). ) Без обид. Ты уел с этим вопросом, я надеялся тебя подколоть, не получилось. Молодец )
Ratings: 0 negative/1 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 25 Артём  (Гостей: 24)

© 2000-2024 Fox Club 
Яндекс.Метрика