Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.28;
Скачать: CL | DM;

Вниз

Хранить TStrings в файле   Найти похожие ветки 

 
snake-as ©   (2008-11-19 20:18) [0]

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


 
sniknik ©   (2008-11-19 20:22) [1]

может быть виртуальный метод.


 
palva ©   (2008-11-19 20:23) [2]


> из-за чего это может быть?

Из-за того, что Perem не содержит строки с номером i.


 
Leonid Troyanovsky ©   (2008-11-19 20:27) [3]


> snake-as ©   (19.11.08 20:18)  

> имеет тип TStrings. Сохраняется и читается переменная из
> файла нормально. В начале я вызываю конструктор Perem :=
> TStrings.Create.

Оный класс, во-ще-то, весьма абстрактен.

--
Regards, LVT.


 
Сергей М. ©   (2008-11-19 20:45) [4]


> Сохраняется и читается переменная из файла нормально


Сохранять в файле указатель бессмысленно, если  считываться и использоваться он будет в другом процессе.


 
snake-as ©   (2008-11-19 20:47) [5]

Я, короче, не обратиться хочу, а наоборот, записать туда.


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

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


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


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

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

Кхм..

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

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

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-11-19 21:01) [8]

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


 
Gydvin ©   (2008-11-19 22:11) [9]

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


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


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

[4] читал?


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

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


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


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

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


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

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


 
snake-as ©   (2008-11-20 02:33) [14]

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


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


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


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


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


> как бы вы записывали данные в переменную типа 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;


 
Anatoly Podgoretsky ©   (2008-11-20 09:22) [17]

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


 
snake-as ©   (2008-11-20 12:47) [18]

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


 
Palladin ©   (2008-11-20 12:52) [19]

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


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

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


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


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


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


 
Anatoly Podgoretsky ©   (2008-11-20 13:18) [22]

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

TObject  тоже


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


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


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

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


 
Anatoly Podgoretsky ©   (2008-11-20 13:55) [24]

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


 
KilkennyCat ©   (2008-11-20 13:57) [25]


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.12.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
15-1225427301
Gans
2008-10-31 07:28
2008.12.28
Соц.опрос (Какой зубной пастой вы пользуетесь?)


2-1227001881
Scot Storch
2008-11-18 12:51
2008.12.28
Отрисовка ellipce в ListBox


15-1225372107
maks_
2008-10-30 16:08
2008.12.28
Заказ на программу


4-1202755664
Prosto Dimon
2008-02-11 21:47
2008.12.28
API internet explorer_server


2-1226997574
SkyN
2008-11-18 11:39
2008.12.28
Как избавиться от 100% загрузки CPU? 5Мб лога в секунду.