|
#1
|
|||
|
|||
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 Последний раз редактировалось M.A.D.M.A.N., 25.02.2013 в 22:21. |
#2
|
||||
|
||||
Не понятно, какие типы переменных используются. Может в них косяк быть (ошибка 201).
З.Ы. Проверил, у меня данный код работает, происходит заполнение массива числовыми данными (типа -0.720767676830292) из небольшого текстового файла. Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 26.02.2013 в 01:48. Причина: Дополнение |
#3
|
|||
|
|||
Ну да, насчёт типов.
Если data:array of double; то 400 миллионов - это больше трёх гигабайт, на win32 может не прокатить. |
#4
|
|||
|
|||
а какой тип тогда использовать
|
#5
|
||||
|
||||
Не советую такие объемы данных сразу в память грузить. Читай по кускам, обрабатывай по кускам.
jmp $ ; Happy End! The Cake Is A Lie. |
#6
|
|||
|
|||
а есть пример как по кускам такое кол-во обрабатывать
|
#7
|
||||
|
||||
Зависит от того, какая нужна обработка.
jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
|||
|
|||
необходимо работать с этими 400 млн значениями,искать максиумы и миинимумы и строить графики отдельных участков
|
#9
|
||||
|
||||
Искать максимум и минимум можно без прочтения всего в память. После прочтения очередного значения проверить его, не является ли оно текущим максимумом (больше предыдущего максимума).
Строить графики по частям - ну опять же, их-то надо строить по частям, читаешь часть и рисуешь по ней график. jmp $ ; Happy End! The Cake Is A Lie. |