Тема: Range Check Error
Показать сообщение отдельно
  #1  
Старый 25.02.2013, 22:07
zyxel8787 zyxel8787 вне форума
Прохожий
 
Регистрация: 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
Ответить с цитированием