
25.02.2013, 22:07
|
Прохожий
|
|
Регистрация: 25.03.2009
Сообщения: 5
Репутация: 10
|
|
Range Check Error
Есть два файла по 400 млн. значений,пытаюсь загрузить их в два динамических массива но при нажатии кнопки загрузка вылетает эта ошибка Range Check Error. Может что то с памятью надо делать?
Код:
procedure LoadData(fn:string);
begin
AssignFile(f,fn);//Подключаем файл
Reset(f);//Открываем файл
SetLength(data,count);//Задаём размер массива data
d:=round(count/100);//Задаём шаг
a:=d;
Form1.Label5.Caption:='Please,wait';
Form1.Gauge1.Progress:=0;//Обнуляем Gauge1
Form1.Gauge1.Show;//Показываем Gauge1
for i:=1 to count do//Цикл считывания строк из файла
begin
CheckAbort;//Проверяем нажатие кнопки закрытия программы
Readln(f,buf);//Считываем строку из файла и помещаем в buf
if i=a then//Условие обновления Gauge1
begin
Form1.Gauge1.Progress:=Form1.Gauge1.Progress+1;
a:=a+d;//Задаём значение проверки для следующего обновления Gauge1
end;
ps:=pos('.',buf);//Ищем в строке buf символ '.' и сохраняем позицию в ps
if ps=0 then//Условие проверки числа; если '.' нет, то выполняем
begin
buf:=buf+',0';//добавляем к числу ',0'
end
else//Заменяем '.' на ','
begin
num:=copy(buf,1,ps-1);//Сохраняем символы из buf в num до точки
num:=num+',';//Добавляем к num символ ','
num:=num+copy(buf,ps+1,length(buf)-ps);//Сохраняем символы из buf в num после точки
end;
data[i-1]:=StrToFloat(num);//Конвертируем из строки в число и сохраняем в массив
end;
CloseFile(f);
Form1.Gauge1.Hide;//Прячем Gauge1
MAD: Для оформления кода используем тег code а не quote
|