Главная страница
    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.5 MB
Время: 0.005 c
15-1225437365
axd
2008-10-31 10:16
2008.12.28
Вопрос по трафику


15-1225098322
guav
2008-10-27 12:05
2008.12.28
Раскритикуйте бред С++ника :)


2-1227108107
snake-as
2008-11-19 18:21
2008.12.28
Динамическое создание компонентов и использование в виде массивов


15-1224837526
kaif
2008-10-24 12:38
2008.12.28
Хороший хостинг


2-1227078866
olegIvan
2008-11-19 10:14
2008.12.28
Выставить время





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский