![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические массивы [D6]
Faeton08 © (2004-08-09 06:45:00)Уважаемые знатоки,у меня возникла следующия проблема.
Есть динамический двухмерный массив ,внего заносятся определённые данные,массив не равномерный тобиш,1..2,2...5,3..17,4..n,n..n,проблема в том что когда я начинаю прогонять его в цикле на проверку данных,не инициалезированные ячейки обозначаются как Unassigned,цикл естественно вылетает,подскажите пожалуйста как с эти боротся.
Заранее все спасибо.
Andrick (2004-08-09 07:15:00) [21]Для отброса неинициализированных значений можно использовать
if Assigned (ArrayData[t,i]) then
{работа с данными}
Sergey Kaminski (2004-08-09 07:14:00) [22]>> if ArrayDataTemp[j,i]
память для елемента [j,i] еще не выделена?
а что мешает сразу выделить для всего массива?
Faeton08 (2004-08-09 07:11:00) [23]Поверь мне наслово,я себя обманывать не буду
Sergey Kaminski (2004-08-09 07:10:00) [24]я вот, например, не уверен, что приведенный код относится к указанной проблеме.
Faeton08 (2004-08-09 07:10:00) [25]а вот так я пытался масив подровнять
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;
Faeton08 (2004-08-09 07:09:00) [26]Вот и я о том же
Sergey Kaminski (2004-08-09 07:08:00) [27]упс
Sergey Kaminski (2004-08-09 07:07:00) [28]кода дай.
например, как выделяешь память для массива.
Faeton08 (2004-08-09 07:07:00) [29]Ну ладно сами напросились :)
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;
Faeton08 (2004-08-09 07:05:00) [30]Да в том то и приком что мне нужно масси подравнять,а не инициалезированные ячейки,инициализировать и заполнить их например '-'.
Sergey Kaminski (2004-08-09 07:03:00) [31]>> массив не равномерный тобиш,1..2,2...5,3..17,4..n,n.
тобишь?
>> не инициалезированные ячейки обозначаются как Unassigned
то есть?
>> цикл естественно вылетает
естественно?
>> как с эти боротся.
привести немножко кода :)
TUser (2004-08-09 07:01:00) [32]Обращайся к тем ячейкам, которые у тебя есть. Например так
for i:=0 to length(Ar)-1 do
for j:=0 to length(Ar[i])-1 do
{bla bla bla}
А вообще в таких вопросах - лучше приводить свой код.
kos (2004-08-09 06:55:00) [33]Удалено модератором