TStrings.LoadFromFile (Error 211)

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

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

TStrings.LoadFromFile (Error 211)

Сообщение VirtUX » 02.07.2008 09:39:46

Error 211 выдает отладчик во время попытки загрузить данные из текстового файла в поле класса типа TStrings.
Код: Выделить всё
TMyClass = class(TForm)
  procedure FormCreate(Sender: TObject);
private
  FMyStringList: TStrings;
public
  property MyStringList: TStrings read FMyStringList write FMyStringList;
  function LoadMyList(F: string): integer;
end;
...
procedure TMyClass.FormCreate(Sender: TObject);
begin
  MyStringList := TStrings.Create;
  {пробовал создавать и между Application.FormCreate - Application.Run}
end;

function TMyClass.LoadMyList(F: string): integer;
begin
  Result := -1;
  if FileExists(F) then
    Result := MyStringList.LoadFromFile(F); {на этом месте выделяет и дает ошибку}
end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: TStrings.LoadFromFile (Error 211)

Сообщение alexs » 02.07.2008 09:51:19

TStrings - это абстрактный клас. Используй TStringList
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TStrings.LoadFromFile (Error 211)

Сообщение VirtUX » 02.07.2008 10:01:39

alexs писал(а):TStrings - это абстрактный клас. Используй TStringList
Спасибки - помогло!

Добавлено спустя 1 час 72 минуты 96 секунд:
Теперь RunError(216) при попытке извлеч кол-во загруженных записей :(
Код: Выделить всё
...
var xL: integer;
begin
...
  xL := MyStringList.Count; {выделяет эту строку}
...
end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: TStrings.LoadFromFile (Error 211)

Сообщение Attid » 02.07.2008 14:54:56

не должно быть такого. ты много туда записей напихал ? как пихал ? если из файла то в какой ОС и какой в файле перенос строки.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: TStrings.LoadFromFile (Error 211)

Сообщение VirtUX » 02.07.2008 17:04:09

Attid писал(а):не должно быть такого. ты много туда записей напихал ? как пихал ? если из файла то в какой ОС и какой в файле перенос строки.
Записей около 30-ти; LoadFromFile; Linux; IBM-866;
Сейчас попробую перекодировать в UTF-8 перед добавлением в список...

Добавлено спустя 10 минут 31 секунду:
Перекодировка из IBM-866 в UTF-8 не помогла.
Причем ругается сразу после "Успешной компиляции" ДО СТАРТА, а ведь еще ничего не загружено из файла!!!

Добавлено спустя 11 минут 12 секунд:
После некоторого пошкрябывания по лысине - перекинул код из обработчика события CheckBoxChangeBounds в обработчик CheckBoxClick и... О чудо! Заработало!
Вывод: ChangeBounds каким-то образом на начальной стадии отладки (до момента реального его вызова) себя реализует. Мот это и должно быть так... Есно будет ошибка, если класс еще не создан! :)
Всем спасибо!
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: TStrings.LoadFromFile (Error 211)

Сообщение Brainenjii » 02.07.2008 18:21:39

Не совсем в тему, но - попробовал скомпилить проект в Windows - прекрасно работает UTF-8, и из базы всё замечательно выводится, только вот TStringList.SaveToFile('блаблабла.txt') приводит к крякозяберстым файлам... Если к содержимому притензий нет - так и должно быть, то с именем файла - непонятно ^_^ Конвертировать чтоли название перед сохранением?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: TStrings.LoadFromFile (Error 211)

Сообщение Attid » 02.07.2008 21:22:20

Brainenjii писал(а):Конвертировать чтоли название перед сохранением?

угу, ему то откуда знать какая кодировка в твоей файловой системе считается нормальной =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: TStrings.LoadFromFile (Error 211)

Сообщение ViTality » 03.07.2008 09:31:45

Attid писал(а):угу, ему то откуда знать какая кодировка в твоей файловой системе считается нормальной =)

он обязан это знать. из параметров операционной системы. и как он до этого определял?
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: TStrings.LoadFromFile (Error 211)

Сообщение Attid » 03.07.2008 09:43:26

ViTality писал(а):он обязан это знать. из параметров операционной системы. и как он до этого определял?

он не определял, в какой написан в такой и создовал.

5% программ до сих не уммет работать с пробелом в имени файла\папки
и процентов 15% с русскими символами , это в венде, в лине больше. так что использование чего либо кроме латинских букв и цифр в имени файлов это зло.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: TStrings.LoadFromFile (Error 211)

Сообщение ViTality » 03.07.2008 10:32:09

А вот вопрос: UTF-8 че бывает разный?(я знаю что он одна из вариаций Unicode) Просто даже если вспомнить /etc/fstab. Там для ntfs разделов указываем какраз UTF-8. и все нормально пишется.и никаких крякозябр в именах фалов нет.

Attid писал(а):так что использование чего либо кроме латинских букв и цифр в имени файлов это зло.

согласен. вообще придерживаюсь 3 правил:

- НИКАКИХ РУСКИХ БУКВ(транслит наше все, а еще лучше на англицком)
- никаких пробелов(замена на подчеркивание)
- ну и вообще соблюдать досовский стандарт 8.3 (ну это по возможности)
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: TStrings.LoadFromFile (Error 211)

Сообщение Attid » 03.07.2008 12:11:34

ViTality писал(а):Там для ntfs разделов указываем какраз UTF-8. и все нормально пишется.и никаких крякозябр в именах фалов нет.

нтфс в венде всегда в 1251, если спецально ничего не ломали =), а там ты указываешь в какую кодировку конвертировать , если конечно я все правельно путаю =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: TStrings.LoadFromFile (Error 211)

Сообщение VirtUX » 03.07.2008 14:58:45

UTF-8 че бывает разный?
Одинаковый. В чем замечена разность? Пример?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: TStrings.LoadFromFile (Error 211)

Сообщение ViTality » 03.07.2008 15:21:24

Я понимаю что он один. но ненпонимаю почему так получется.
я уже привел пример с нтфс дисками под линь - что все нормально пишется.
и у Brainenjii вместо имени файла кракозябры.

хотя вроде и там и там имена фалов в утф-8.
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: TStrings.LoadFromFile (Error 211)

Сообщение alexs » 03.07.2008 15:34:40

В винде все файловые операции выполняются средствами библиотек FPC а не Lazarus-а и подразумевают, что имя файла будет передаваться в эти процедуры в кодировке Win1251.
Когда ты работаеш в последних сборках Lazarus-а там веся визуальная часть работаето в кодировке UTF8 и порекодировка текста в win1251 или UCS16 происходит непосредственно перед вызовом функций GUI. Это относится только к библиотекам Lazarus-а.
Получается, что ты передаёш в функцию открытия/ создания файла текст в utf8 - и он напрямую (без перекодировки) отправляется винде.
Я для себя проблему решил простенькой inline функцией перекодировки имён файлов непосредственно перед вызовом функций FPC.
Для примера - попробуй с помощью Writeln что либо записать в текстовый файл - весь русский текст будет в utf8.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TStrings.LoadFromFile (Error 211)

Сообщение yuray » 04.07.2008 10:16:42

alexs писал(а):Я для себя проблему решил простенькой inline функцией перекодировки имён файлов непосредственно перед вызовом функций FPC.


А можно посмотреть на эту inline функцию?
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 2

Рейтинг@Mail.ru