Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.55 MB
Время: 0.047 c
3-1090847005
MORA
2004-07-26 17:03
2004.08.22
Master-Detail


8-1086552818
xman
2004-06-07 00:13
2004.08.22
CANVAS


1-1092068406
Кристина
2004-08-09 20:20
2004.08.22
как отловить нажатие кнопки


14-1091799473
mm0
2004-08-06 17:37
2004.08.22
Ламерский вопрос про Bad blocks


14-1091630890
ram
2004-08-04 18:48
2004.08.22
как в IE поменять адрес домашней страницы