Ну вот, через 8 лет после написания программы выяснилось, что в Клиппере массивы не могут содержать больше 4096 элементов. Конечно, тогда никто и не думал такими огромными пачками информацию компьютерам скармливать, так что я даже и не знал о таком лимите...
Спрашивается, что делать? Писать на чём-нибудь новом то же самое - долго, им нужно прямо сейчас кипу бланков просчитать.
О, зато в клипперовских массивах ничем не ограничено число измерений. Вот лучше б было наоборот, ей-богу...
Спрашивается, что делать? Писать на чём-нибудь новом то же самое - долго, им нужно прямо сейчас кипу бланков просчитать.
О, зато в клипперовских массивах ничем не ограничено число измерений. Вот лучше б было наоборот, ей-богу...
no subject
Date: 2005-05-03 05:49 am (UTC)no subject
Date: 2005-05-03 06:07 am (UTC)Заманчивей сделать его двумерным - типа massiv[int(i/4096)+1, i]. Обдумываю эту мысль, в исходник лезть боюсь пока :) Экий выигрыш во времени получится: пока они 4096 в квадрате бланков насобирают - я успею новую программу написать...
no subject
Date: 2005-05-03 06:09 am (UTC)а ты не можешь просто счетчик поставить - как дошел до 4096, так сразу следующий начинается...
и обратно
no subject
Date: 2005-05-03 06:13 am (UTC)no subject
Date: 2005-05-03 06:28 am (UTC)Я хочу меньшим количеством правки кода отделаться, чего там говорить ;)
Вот с двумерным - оно как бы так и получится: дошла первая строка до 4096 - пошла вторая... и дописать-то всего ничего...
no subject
Date: 2005-05-03 06:33 am (UTC)а то были случаи
no subject
Date: 2005-05-03 06:45 am (UTC)завтра буду додумывать, посмотрим, что получится. А то это я такой умный до тех пор, пока в исходник не влез :)
no subject
Date: 2005-05-03 06:50 am (UTC)я вот исходники уже не правлю, зарекся
проще с самого начала все переписать, чем разбирать чьи-то (а хотя бы и свои старые) исходники
no subject
Date: 2005-05-03 06:53 am (UTC)Clipper
Date: 2005-05-03 07:15 am (UTC)Исходник выглядит примерно так:
static function IdSqPart(n,i)
local j
if layout>len(_parts)
return .F.
end
if i>len(_parts[layout]) .or. i==0
j:=0
do while j
Исходник выглядит примерно так:
static function IdSqPart(n,i)
local j
if layout>len(_parts)
return .F.
end
if i>len(_parts[layout]) .or. i==0
j:=0
do while j<len(_parts[layout])
j++
if IdSqPart(n,j)
return .T.
end
end
else
if ascan(_parts[layout][i][2],{|ss|n>=ss[1] .and. n<=ss[2]})!=0
return .T.
end
end
return .F.
или так:
use fishes
lenfish=lastrec()
fishes=array(lastrec(),2)
for i=1 to lastrec()
go i
fishes[i,1]=fieldget(1)
fishes[i,2]=fieldget(2)
next
close databases
asort(fishes,,,{|x,y| x[1]<y[1] })
no subject
Date: 2005-05-03 08:09 am (UTC)я так понял, что "количество" элементов в массиве - это именно количество, а не максимальная координата поодному измерению.
Или это именно ограничение максимума координаты?
no subject
Date: 2005-05-03 10:29 am (UTC)В руководстве дословно сказано: максимальное количество элементов в каждом измерении 4096, максимальное количество измерений ограничено только возможностями памяти. Хочется верить, что для такого решения у разработчиков был какой-то резон :)
Уф, вот стыдно: понятия не имел, что в клиппере с массивами всё так непросто. Если б наши рыбники не захотели загнать туда результаты пяти тысяч замеров...