Текущий архив: 2004.08.22;
Скачать: CL | DM;
Вниз
Динамические массивы Найти похожие ветки
← →
Faeton08 © (2004-08-09 06:45) [0]Уважаемые знатоки,у меня возникла следующия проблема.
Есть динамический двухмерный массив ,внего заносятся определённые данные,массив не равномерный тобиш,1..2,2...5,3..17,4..n,n..n,проблема в том что когда я начинаю прогонять его в цикле на проверку данных,не инициалезированные ячейки обозначаются как Unassigned,цикл естественно вылетает,подскажите пожалуйста как с эти боротся.
Заранее все спасибо.
← →
kos © (2004-08-09 06:55) [1]Удалено модератором
← →
TUser © (2004-08-09 07:01) [2]Обращайся к тем ячейкам, которые у тебя есть. Например так
for i:=0 to length(Ar)-1 do
for j:=0 to length(Ar[i])-1 do
{bla bla bla}
А вообще в таких вопросах - лучше приводить свой код.
← →
Sergey Kaminski © (2004-08-09 07:03) [3]>> массив не равномерный тобиш,1..2,2...5,3..17,4..n,n.
тобишь?
>> не инициалезированные ячейки обозначаются как Unassigned
то есть?
>> цикл естественно вылетает
естественно?
>> как с эти боротся.
привести немножко кода :)
← →
Faeton08 © (2004-08-09 07:05) [4]Да в том то и приком что мне нужно масси подравнять,а не инициалезированные ячейки,инициализировать и заполнить их например "-".
← →
Faeton08 © (2004-08-09 07:07) [5]Ну ладно сами напросились :)
CountM:=0;
for i:= 0 to countFieldR-1 do
begin
if ArrayData[0,i]<>Trim(FieldLinkKod2) then
begin
if bolSlave = false then
begin
CountM := CountM +1;
setlength(ArrayDataTemp,countSQLMAS,CountM);
for j:=0 to countSQLMAS-1 do
begin
ArrayDataTemp[j,CountM-1]:=ArrayData[j,i];
end;
end
else
begin
bolSlave := false;
end;
end
else
begin
CountM := CountM +1;
setlength(ArrayDataTemp,countSQLMAS,CountM);
for j:=0 to countFieldR-1 do
begin
if ArrayData[0,j]= Trim(FieldLinkKod1) then MasterFiled:=j;
end;
for j:=0 to countSQLMAS-1 do
begin
for t:=0 to countSQLMAS-1 do
begin
if ArrayData[t,i]=ArrayData[j,MasterFiled] then
ArrayDataTemp[j,CountM-1]:=ArrayData[t,i+1];
end;
end;
bolSlave := true;
end;
end;
← →
Sergey Kaminski © (2004-08-09 07:07) [6]кода дай.
например, как выделяешь память для массива.
← →
Sergey Kaminski © (2004-08-09 07:08) [7]упс
← →
Faeton08 © (2004-08-09 07:09) [8]Вот и я о том же
← →
Faeton08 © (2004-08-09 07:10) [9]а вот так я пытался масив подровнять
for i:=0 to CountM-1 do
for j:=1 to countSQLMAS-1 do
begin
if ArrayDataTemp[j,i]=null then
begin
ArrayDataTemp[j,i]:="-";
end;
end;
← →
Sergey Kaminski © (2004-08-09 07:10) [10]я вот, например, не уверен, что приведенный код относится к указанной проблеме.
← →
Faeton08 © (2004-08-09 07:11) [11]Поверь мне наслово,я себя обманывать не буду
← →
Sergey Kaminski © (2004-08-09 07:14) [12]>> if ArrayDataTemp[j,i]
память для елемента [j,i] еще не выделена?
а что мешает сразу выделить для всего массива?
← →
Andrick © (2004-08-09 07:15) [13]Для отброса неинициализированных значений можно использовать
if Assigned (ArrayData[t,i]) then
{работа с данными}
← →
Думкин © (2004-08-09 07:16) [14]код давай.
← →
Faeton08 © (2004-08-09 07:17) [15]Спасибо ,сейчас попробую
← →
Думкин © (2004-08-09 07:17) [16]Ой, я тут уснул - и поздно запостил, звиняюсь.
← →
Sergey Kaminski © (2004-08-09 07:18) [17]Наверное, выход за границы массива или я чего0то не понимаю.
← →
Faeton08 © (2004-08-09 07:21) [18]Матирится он на if Assigned (ArrayData[t,i]) then
говорит Incompatible types
← →
Sergey Kaminski © (2004-08-09 07:28) [19]Выдели память сразу для всего массива и не будет неинициализированнных
SetLength(NArray,Max1,Max)
← →
Andrick © (2004-08-09 07:30) [20]Попробуй if Assigned (ArrayData[t,i]^), иначе давай определение массива
← →
Anatoly Podgoretsky © (2004-08-09 07:36) [21]Код давай
← →
Faeton08 © (2004-08-09 07:38) [22]Да память для него выделенна,я проста не так выразился,просто некоторые ячейки не заполняются данными в процессе заполнения,и обозначаются как Unassigned вот к ним то и не добратся
← →
Faeton08 © (2004-08-09 07:42) [23]Anatoly Podgoretsky выше код заполнения ArrayDataTemp это динамический массив
← →
Sergey Kaminski © (2004-08-09 07:45) [24]
просто некоторые ячейки не заполняются данными в процессе заполнения,и обозначаются как Unassigned
Сделай одолжение — ткни меня носом в то место, где это делается.
← →
Faeton08 © (2004-08-09 07:49) [25]тыкаю :)
for j:=0 to countSQLMAS-1 do
begin
for t:=0 to countSQLMAS-1 do
begin
if ArrayData[t,i]=ArrayData[j,MasterFiled] then
ArrayDataTemp[j,CountM-1]:=ArrayData[t,i+1];
end;
end;
← →
Sergey Kaminski © (2004-08-09 07:53) [26]массив как определен?
← →
Faeton08 © (2004-08-09 07:55) [27]ArrayDataTemp :array of array of Variant;
← →
KSergey © (2004-08-09 08:05) [28]> [5] Faeton08 © (09.08.04 07:07)
А может вместо писания сюда сесть и хорошенько обмозговать код и подход к проблеме?
Тут куча каких-то переменных, которые фиг знает чему равны, приведеный код начинается с бухты-барахты (if ArrayData[0,i]<>Trim(FieldLinkKod2) - а выделение памяти под элементы где произошло??)
Боюсь, что могут только посмеяться.
Комп - в сторону
Ручку, бумажку - в зубы - и вперед. Выполнять программу за комп, выписывая значения переменных на данный момент - проблдема и решиться, уверяю!
А разбираться в этом бреде, где просто явные есть простейшие ошибки - не стыдно на форум? Ничего умного тут нет, надо просто немного аккуратно поработать - вот и все.
PS
Что думал - то и написал.
← →
Sergey Kaminski © (2004-08-09 08:16) [29]С ЭТОГО И СТОИЛО НАЧАТЬ.
Проверку можно произвести вот так:
if VarType(A[I]) and varTypeMask = varEmpty then
A[I] := "-";
гдеA
естьarray of Variant;
Но можно этого избежать, если ПЕРЕД заполнением массива, пройтись в цикле и всем ячейкам присвоить какое-нибудь значение, хотя бы и "-". И не нужно тогда ничего проверять
← →
Sergey Kaminski © (2004-08-09 08:19) [30]надеюсь, я все-таки правильно УГАДАЛ проблему?
П.С. KSergey прав на 100%.
← →
Faeton08 © (2004-08-09 09:51) [31]ребят это просто кусок кода,если я все выложу боюсь места не хватит,а приведенный код это сортировка выборки данных из базы данных,а програмулина универсальный построитель отчёто для Lotus Domino,но всеровно несмотря на критеку спасибо
← →
KSergey © (2004-08-09 10:34) [32]А зачем выкладывать весь код??
Вы сделайте модельный пример, минимальный, на котором проблема будет видна.
Тогда и приводите его.
А разбираться во всем нагромождении кучи кода, тем более, что дело не в недопонимании каких-то общих моментов, а просто в банальных ошибках реализации - это через кассу, уж извините ;)
← →
Rutven © (2004-08-09 15:25) [33]Indicates whether the specified variant is unassigned.
Unit
Variants
Category
Variant support routines
function VarIsEmpty(const V: Variant): Boolean;
Description
VarIsEmpty returns True if the given variant contains the value Unassigned. If the variant contains any other value, the function result is False.
Страницы: 1 вся ветка
Текущий архив: 2004.08.22;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.023 c