Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

Динамические массивы   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.044 c
1-1091972182
Toshanius
2004-08-08 17:36
2004.08.22
Програмное добавление TabSheet a


3-1091199727
pashtet
2004-07-30 19:02
2004.08.22
Что лучше Interbase FB Yaffil или PostgreSQL Ingres?


14-1091639369
dentist
2004-08-04 21:09
2004.08.22
Глюки Delphi 7


3-1091024994
MORA
2004-07-28 18:29
2004.08.22
корректно ли я использую транзакции?


1-1092077414
Drow
2004-08-09 22:50
2004.08.22
Ошибка integer or String





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский