глючит цикл for

sanich
Дата: 10.12.2007 16:23:10
E.ActiveWorkBook.ActiveSheet.Range['A'+inttostr(HatRow)].Select;//вычисляем номера столбцов шапки таблицы
    E.ActiveCell.offset[0,1].Select;//сдвигаем на 1 вправо
    while trim(E.ActiveCell.FormulaR1C1)<>'' do begin
     CurCol:=AnsiLowerCase(trim(E.ActiveCell.FormulaR1C1));
     for i:=1 to 7 do
      if (CurCol=ColName[i,1]) or (CurCol=ColName[i,2]) then begin
         ColNum[i]:=E.ActiveCell.Column;
         break;
      end;
     E.ActiveCell.offset[0,1].Select;//сдвигаем на 1 вправо
    end;

Внутренний цикл for работает в обратном направлении, в режиме трасировки, смотрю
сначала присваевается
i=7
i=6...5,4,3,2,1

Это еще не самое страшное,
Чуть ниже в этой же процедуре есть еще один цикл for (возрастающий)

for j:=1 to k do begin//сканим ячейки слева/направо
      if ColNum[j]<>0 then
       rec[j]:=E.Cells[IntToStr(i),inttostr(ColNum[j])].formula;
end;

Явно присваиваю 1, в режиме трасировки до этого значения вообще не возможно добраться!!!

В другой процедуре его же модуля сделал цыкл фор возрастающий, он работает нормально по возрастанию, от меньшего к большему!!1

И еще иногда выскакивала ошибка:
[Fatal Error] Unit1.pas(10): Internal error: SY576, перезагрузка делфы помогает.

C чем это может быть связано??
Johnmen
Дата: 10.12.2007 16:25:07
Так решил компилятор. А он оптимизирующий.
sanich
Дата: 10.12.2007 16:29:51
Johnmen
Так решил компилятор. А он оптимизирующий.

а че сделать то можно?
Anatoly Podgoretsky
Дата: 10.12.2007 16:32:44
А зачем, у тебя что результат неправильный
sanich
Дата: 10.12.2007 16:34:04
Anatoly Podgoretsky
А зачем, у тебя что результат неправильный


мне надо чтоб цикл for работал по возрастанию
Anatoly Podgoretsky
Дата: 10.12.2007 16:40:15
Зачем?
sanich
Дата: 10.12.2007 16:42:59
Anatoly Podgoretsky
Зачем?

логика алгоритма такая
Anatoly Podgoretsky
Дата: 10.12.2007 16:52:48
У тебя что результат неправильный
sanich
Дата: 10.12.2007 16:53:14
sanich
Это еще не самое страшное,
Чуть ниже в этой же процедуре есть еще один цикл for (возрастающий)

[src delphi]
for j:=1 to k do begin//сканим ячейки слева/направо
      if ColNum[j]<>0 then
       rec[j]:=E.Cells[IntToStr(i),inttostr(ColNum[j])].formula;
end;
на третьей строчке выскакивает ошибка!!!Потому что переменная j не имеет значения!
Явно присваиваю 1, в режиме трасировки до этого значения вообще не возможно добраться!!!


Вот здесь явная ошибка!!!
sanich
Дата: 10.12.2007 16:54:19
Anatoly Podgoretsky
У тебя что результат неправильный


да результат то правильный, но в топике выше результата вообще нет т.к. ошибка!!!