![]() |
|
|
#1
|
|||
|
|||
|
Есть два файла по 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;//Прячем Gauge1MAD: Для оформления кода используем тег code а не quote Последний раз редактировалось M.A.D.M.A.N., 25.02.2013 в 22:21. |