Проблемы с загрузкой файла в Memo

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблемы с загрузкой файла в Memo

Сообщение Damir » 24.02.2009 13:34:21

Добрый день!
Очень нужна помощь в решении следующей проблемы: мне необходимо загружать содержимое текстового файла (цифры) в Memo и оттуда загонять их в массив. Код такой:

Код: Выделить всё
unit Unit1;
......
  private
    { private declarations }
   
    x : array[1..input] of real;
....

procedure TForm1.Button2Click(Sender: TObject);
var dir, filename, name_ : String;
      k, r, i, j, f, p, iz : Integer;
      SearchRec : TSearchRec;
      str, s : String;
begin
    dir := DirectoryEdit1.Directory;
    dir := dir + '\';

    for k := 1 to n do begin
     
      FindFirst(dir + '*.txt', faAnyFile, SearchRec);
      filename := dir + SearchRec.Name;
      name_ := SearchRec.Name;

      while (FindNext(SearchRec)=0) do begin
     
        Memo1.Lines.LoadFromFile(filename);

        str := Memo1.Lines[0];
        s := '';
        f := 1;

        for i := 1 to Length(str) do
          if str[i] <>' ' then s := s + str[i]
          else begin
            x[f] := StrToFloat(s); s := '';
            inc(f);
          end;

        filename := dir + SearchRec.Name;
        name_ := SearchRec.Name;
      end; {WHILE}

    end; {k}

    for i := 1 to 30 do
      Memo1.Lines.Add(IntToStr(i)+'-->'+FloatToStr(x[i]));

end;

initialization
  {$I unit1.lrs}

end.


Безусловно, ошибки могут быть, но странно поведение Lazarus'а: если в директории находится только один текстовый файл, то программа срабатывает, однако в цикл while не заходит... если же файлов 2 или больше, то при нажатии на кнопку button2 приложение просто выключается... Честно говоря, не знаю, в чем может быть причина...
Либо у Lazarus'а проблемы с Memo, либо у меня в коде :)
Пробовал убрать строки, где пишется информация в Memo - тогда всё работает...

(P.S. - ОС Windows XP, Lazarus 0.9.24 beta)

Заранее благодарен за любую помощь.
Последний раз редактировалось Damir 24.02.2009 14:46:26, всего редактировалось 1 раз.
Damir
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.02.2009 13:21:51

Re: Проблемы с загрузкой файла в Memo

Сообщение Padre_Mortius » 24.02.2009 14:36:46

А зачем нужен цикл неопределенного кол-ва повторений
Код: Выделить всё
for k := 1 to n do begin
?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблемы с загрузкой файла в Memo

Сообщение Damir » 24.02.2009 14:44:11

Это только часть программы, цикл по k нужен будет далее. (Конкретно программа занимается обучением нейронной сети)
Damir
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.02.2009 13:21:51

Re: Проблемы с загрузкой файла в Memo

Сообщение Padre_Mortius » 24.02.2009 15:12:22

Поменяйте цикл while на цикл repeat-until и поиск файлов будет работать нормально
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблемы с загрузкой файла в Memo

Сообщение Damir » 24.02.2009 15:34:03

Заменил... Но все равно приложение сразу же закрывается после нажатия на button2 :(
Damir
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.02.2009 13:21:51

Re: Проблемы с загрузкой файла в Memo

Сообщение Padre_Mortius » 24.02.2009 15:41:19

Код: Выделить всё
procedure TForm1.Button2Click(Sender: TObject);
var dir, filename, name_ : String;
      k, r, i, j, f, p, iz : Integer;
      SearchRec : TSearchRec;
      str, s : String;
begin
    dir := DirectoryEdit1.Directory;
    dir := dir + '\';

   // for k := 1 to n do begin

      FindFirst(dir + '*.txt', faAnyFile, SearchRec);
      repeat
         if (SearchRec.Attr and faAnyFile) <> 0 then
         begin
           filename := dir + SearchRec.Name;
           //Memo1.Lines.Add (filename);
           Memo1.Lines.LoadFromFile(filename);
           str := Memo1.Lines[0];
           s := '';
           f := 1;
           for i := 1 to Length(str) do
             if str[i] <>' ' then s := s + str[i]
             else begin
               x[f] := StrToFloat(s); s := '';
               inc(f);
             end;
         end;
      until FindNext(SearchRec)<>0;
      FindClose(SearchRec);
  //  end; {k}

    for i := 1 to 30 do
      Memo1.Lines.Add(IntToStr(i)+'-->'+FloatToStr(x[i]));

end;
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблемы с загрузкой файла в Memo

Сообщение Damir » 24.02.2009 17:17:37

Всё равно то же самое... :(
Если компилировать в Lazarus'е, то при нажатии на button2 пишет Project raised exception class 'External: SIGSEGV'.
Потом выдает сообщение : Файл "heap.inc" не найден. Вы хотите поискать его самостоятельно?
Но exe'шник пявляется. Если его запустить, то при нажатии на button2 приложение закрывается.

Может Lazarus переустановить?
Damir
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.02.2009 13:21:51

Re: Проблемы с загрузкой файла в Memo

Сообщение Padre_Mortius » 24.02.2009 17:48:37

Наверное стоит обновить lazarus и fpc
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблемы с загрузкой файла в Memo

Сообщение Damir » 24.02.2009 17:51:20

А как fpc обновлять?
Damir
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.02.2009 13:21:51

Re: Проблемы с загрузкой файла в Memo

Сообщение Padre_Mortius » 24.02.2009 17:59:06

http://downloads.sourceforge.net/lazarus/lazarus-0.9.26-fpc-2.2.2-win32.exe?use_mirror=surfnet Качаете файл по ссылке и устанавливаете его. Предыдущую версию лучше удалить, но на всякий случай сохраните файл fpc.cfg. Он может еще пригодиться
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблемы с загрузкой файла в Memo

Сообщение Damir » 24.02.2009 18:22:36

Стало еще хуже... теперь даже на другой кнопке (там просто массив заполняется случайными числами), появляется ошибка Project raised exception class 'External: SIGSEGV'.
Теперь только еще новые сообщения добавились: "Выполнение остановлено. Адрес: 00409C89 Процедура:SYSTEM_TOOBJECT_$__INHERITSFROM$TCLASS$$BOOLEAN" :(
Damir
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.02.2009 13:21:51

Re: Проблемы с загрузкой файла в Memo

Сообщение Vadim » 24.02.2009 18:23:52

Damir
Можно ещё скачать отсюда:
ftp://ftp.freepascal.org/pub/lazarus/Lazarus-0.9.27-18811-fpc-2.2.3-20090224-win32.exe
Там каждый день выкладывают готовые сборки Lazarus+FreePascal в одном флаконе. Примерно 60 МБ.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблемы с загрузкой файла в Memo

Сообщение Padre_Mortius » 24.02.2009 18:27:49

Выложите полностью проект, т.к. есть подозрение что он валится совсем не на этом участке кода.

Добавлено спустя 2 минуты 9 секунд:
или просто попробуйте создать новый проект и вставить в него предложенный код.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблемы с загрузкой файла в Memo

Сообщение Damir » 24.02.2009 18:36:11

Лучше в архиве все файлы или просто код здесь разместить?

Код переписывал заново после переустановки... как писал выше - не помогло, к сожалению :(
Damir
незнакомец
 
Сообщения: 9
Зарегистрирован: 24.02.2009 13:21:51

Re: Проблемы с загрузкой файла в Memo

Сообщение Vadim » 24.02.2009 18:46:05

Damir
Если кода много - давайте в архив.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

Рейтинг@Mail.ru