Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хранить TStrings в файле


Страницы:   1 2

snake-as ©   (2008-11-19 20:18:00) 

Здравствуйте. У меня такая ситуация: есть файл. В этот файл записывается объект некоего класса. Одно из св-в класса имеет тип TStrings. Сохраняется и читается переменная из файла нормально. В начале я вызываю конструктор Perem := TStrings.Create. Но, когда я хочу обратиться к строкам через Perem[i], то у меня выдает ошибку доступа. Скажите, пожалуйста, из-за чего это может быть?


KilkennyCat   (2008-11-20 13:57:00) [1]


> Ну сюда приходят с разным умом.

Чаще - без оного.


Anatoly Podgoretsky   (2008-11-20 13:55:00) [2]

Ну сюда приходят с разным умом. Ты же видел создание TStrings?


Сергей М.   (2008-11-20 13:28:00) [3]


> Anatoly Podgoretsky ©   (20.11.08 13:18) [22]


Не думаю что кто-то в здравом уме будет его создавать.

Тогда туда же до кучи можно отнести любые типы данных, память под которые выделяется динамически при посредничестве BMM


Anatoly Podgoretsky   (2008-11-20 13:18:00) [4]

> Сергей М.  (20.11.2008 12:54:21)  [21]

TObject  тоже


Сергей М.   (2008-11-20 12:54:00) [5]


> не знал, что TStrings - это всего лишь указатели


Не только TStrings - любойобъект-наследник класса TObject в Делфи представлен указателем


Palladin   (2008-11-20 12:52:00) [6]

тьфу, указателем.... один html в голове...


Palladin   (2008-11-20 12:52:00) [7]

Ты должен знать, как свое имя, что любойидентификатор объекта является ссылкой- это написано в любом учебнике делфи, который не "за 10 минут"...


snake-as   (2008-11-20 12:47:00) [8]

Все, спасибо огромное! Я не знал, что TStrings - это всего лишь указатели. Спасибо большое, разобрался во всем! Четкий форум, быстро отвечают и правильно! Всем респект:)


Anatoly Podgoretsky   (2008-11-20 09:22:00) [9]

Правду говорят, что программисты не понимают указателей.


Сергей М.   (2008-11-20 08:23:00) [10]


> как бы вы записывали данные в переменную типа TStrings,
> которая бы хранилась в файле


В переменной типа TStrings хранится указатель!
Бессмысленно сохранять этот указатель в файле !

В файле следует сохранять не данные из переменной типа TStrings, а данные из св-ва Text объекта типа TStrings, на который указавает эта переменная.

MyStringsObject := TStringList.Create;
try
 MyStringsObject.Add('One');
 MyStringsObject.Add('Two');
 СохранитьВФайл(Файл, MyStringsObject.Text);
finally
 MyStringsObject.Free;
end;
..
MyStringsObject := TStringList.Create;
try
 MyStringsObject.Text := ПрочитатьИзФайла(Файл);
finally
 MyStringsObject.Free;
end;


Сергей М.   (2008-11-20 08:14:00) [11]


> snake-as ©   (20.11.08 02:30) [13]
>
> Нет, тот же самый.


А зачем тогда сохранение в файле, если тот же самый ?
Да и в том же самом можно AV огрести, если не понимать что на что в каждый момент времени указывает.


snake-as   (2008-11-20 02:33:00) [12]

А можете привести маленький примерчик, как бы вы записывали данные в переменную типа TStrings, которая бы хранилась в файле. Может просто я не так конструктор вызываю или не так записываю. Заранее спасибо


snake-as   (2008-11-20 02:30:00) [13]

Нет, тот же самый.


Германн   (2008-11-20 01:52:00) [14]


> snake-as ©   (20.11.08 01:37) [11]
>
> Что значит будет считываться в другом процессе?
>

Значит один процесс записал в файл, другой процесс прочитал из файла.


snake-as   (2008-11-20 01:37:00) [15]

Что значит будет считываться в другом процессе?


Германн   (2008-11-20 01:26:00) [16]


> Gydvin ©   (19.11.08 22:11) [9]
>
> Может проще использовать TStringList ?

[4] читал?


Gydvin   (2008-11-19 22:11:00) [17]

Может проще использовать TStringList ?


Anatoly Podgoretsky   (2008-11-19 21:01:00) [18]

TSrings не имеет средств хранения, это базовый класс для построения наследников, которые и должны реализовывать хранилище. Поэтому создавать его бессмысленно.


Leonid Troyanovsky   (2008-11-19 21:00:00) [19]


> Сергей М. ©   (19.11.08 20:48) [6]

> [4] остается в силе

Кхм..

"В начале я вызываю конструктор Perem := TStrings.Create. Но, когда я хочу обратиться к строкам через Perem[i], то у меня выдает ошибку доступа"

Народ хочет знать, что ж автору выдали.

--
Regards, LVT.


Сергей М.   (2008-11-19 20:48:00) [20]

А по барабану что ты хочешь.
[4] остается в силе


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо