Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертация строк 
:(
    Опции темы
bems
Дата 8.5.2011, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



пиши каждое строковое поле отдельно. Для каждой строки пиши сначала её длину, а потом собственно символьные данные.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
CodeMonkey
Дата 8.5.2011, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(PsiMagistr @  8.5.2011,  09:40 Найти цитируемый пост)
Поднимать для этого дела серилизацию объектов? Круто.


А чего, собственно, её поднимать? Она и так есть. По умолчанию.

Достаточно
Код
type
  persones = packed record
    Name:String[255];
    SecondName:String[255];
    FamilyName:String[255];
    Age: Integer;
  end;

заменить на:
Код
type
  persones = class(TPersistent)
  private
    FName: String;
    FSecondName: String;
    FFamilyName: String;
    FAge: Integer;
  published
    property Name: String read FName write FName;
    property SecondName: String read FSecondName write FSecondName;
    property FamilyName: String read FFamilyName write FFamilyName;
    property Age: Integer read FAge write FAge;
  end;


И всё. И мы можем сохранять/загружать такой объект одной строчкой.

Ежели это всё равно кажется чем-то неудобным, то: http://www.delphikingdom.ru/asp/viewitem.a...talogid=1206#06


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
PsiMagistr
Дата 8.5.2011, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Немного разобрался. Наследовал, правда не от TPersistent, а от TComponent

и тогда


 FileStream.WriteComponent(объект)

Но записей можно хоть целую кучу в одном файле хранить и далее смещая файловый курсор-указатель (Seek) на длину (SizeOf(Record)

записи, находить нужную.

А как с объектами быть? Если мне их надо в одной пачке хранить. 

У меня по файлу с пачками записей образуется динам. массив записей. В нем столько ячеек, сколько записей в файле. Они туда все считываются. Но количество записей я рассчитать могу (Общая длинаФайла, деленная на длину 1 записи)

А с пачкой объектных данных как быть?

Заранее спасибо.

Это сообщение отредактировал(а) PsiMagistr - 8.5.2011, 18:38


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
northener
Дата 9.5.2011, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(bems @  8.5.2011,  08:18 Найти цитируемый пост)
нет, ты не оставляй. Ты мне скажи что не правильно, потому что иначе я буду считать

Отвечать на форуме считаю неправильным решением. Отвечать в личке?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 9.5.2011, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



northener, пиши тут


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 10.5.2011, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(bems @  9.5.2011,  14:22 Найти цитируемый пост)
northener, пиши тут

Ну так и быть - пишу тут.
Вот вы произнесли/сказали - "короткий литерал" в сообщении от 7.5.2011, 13:54.
А что значит этот термин "короткий литерал"? Я такого термина не знаю. 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CodeMonkey
Дата 10.5.2011, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(PsiMagistr @  8.5.2011,  19:37 Найти цитируемый пост)
А как с объектами быть? Если мне их надо в одной пачке хранить. 

У меня по файлу с пачками записей образуется динам. массив записей. В нем столько ячеек, сколько записей в файле. Они туда все считываются. Но количество записей я рассчитать могу (Общая длинаФайла, деленная на длину 1 записи)

А с пачкой объектных данных как быть?


Есть несколько подходов. Самый грамотный - набор объектов должен загружать/сохранять объект контейнер.

Совсем простой вариант - так же, как и с "пачками записей".

Пишем объекты друг за другом в один поток. При чтении - читаем, пока не конец потока.

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


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
northener
Дата 10.5.2011, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(CodeMonkey @  10.5.2011,  01:27 Найти цитируемый пост)
Есть несколько подходов. Самый грамотный - набор объектов должен загружать/сохранять объект контейнер.

Давайте забудем об объектах. Автору объекты как таковые  не нужны. Так он считает и я с ним согласен.
Ведь он что хочет - записывать записи в файл и потом считывать их из файла.



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 10.5.2011, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(northener @  10.5.2011,  01:17 Найти цитируемый пост)
А что значит этот термин "короткий литерал"? Я такого термина не знаю
Сначала ты говорил что я неправильно употребил термин литерал, а теперь говоришь что я говорю о несуществующем термине "короткий литерал"
Я говорил что 255 символов это ограничение на длину строкового литерала в дельфи (собственно поэтому я и назвал их короткими), а не на длину строки, как говорил ты.



--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 10.5.2011, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(bems @  10.5.2011,  02:16 Найти цитируемый пост)
Цитата(northener @  10.5.2011,  01:17 Найти цитируемый пост)
А что значит этот термин "короткий литерал"? Я такого термина не знаю
Сначала ты говорил что я неправильно употребил термин литерал, а теперь говоришь что я говорю о несуществующем термине "короткий литерал"
Я говорил что 255 символов это ограничение на длину строкового литерала в дельфи (собственно поэтому я и назвал их короткими), а не на длину строки, как говорил ты.


Хм. Давай всё же перейдём в личку. И там спокойно, со временем,  разберёмся что, кто и когда говорил. Ибо я никогда не говорил ту ересь, которую ты мне приписываешь.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 10.5.2011, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(northener @  10.5.2011,  02:27 Найти цитируемый пост)
я никогда не говорил ту ересь, которую ты мне приписываешь

Говорил.
Цитата(northener @  8.5.2011,  01:44 Найти цитируемый пост)
Оставляю за строкой неправильное упоминание термина литерал.
Вот тут ты говоришь что речь идет именно о термине "литерал"
Цитата(northener @  7.5.2011,  13:47 Найти цитируемый пост)
Иначе откуда ограничение в редакторе IDE на количество букв в строке pas-файла smile ?
А тут ты говоришь об ограничении длины строки пас-файла в 255 символов, хотя такого ограничения нет (там кажется 1024 или что-то такое), а ограничение в 255 именно что на длину строкового литерала
Цитата(northener @  10.5.2011,  02:27 Найти цитируемый пост)
Давай всё же перейдём в личку
Не нужно. Есть предложение просто закрыть эту тему



--------------------
Обижено школьников: 8
PM MAIL   Вверх
PsiMagistr
Дата 10.5.2011, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Кстати ребята,

Вот создал я объект на основе другого объекта.

Добавил новые поля. Забаррикадировал поля свойствами.

Нужно ли мне переписывать деструктор?

Ведь если я воспользуюсь стандартным (присущим объекту родителю) то новые поля не будут уничтожены. Ведь старый деструктор ничего не знает о добавленных полях.

И

Если я должен переработать деструктор, что я туда должен записать? Как уничтожить поля?


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
PsiMagistr
Дата 10.5.2011, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Тяжела ты шапка программиста.



Имеется массив Mass, содержащий объекты с разными данными, но все естественно одинакового класса. 

Пытаюсь записать массив в файл.

Код

procedure TForm1.Button3Click(Sender: TObject);
var i:Integer; F:TFileStream; M:TMemoryStream;
begin
M:=TMemoryStream.Create;
 F:=TFileStream.Create(ExtractFilePath(Application.ExeName)+ 'ПроБА',fmCreate);
 for i := 0 to high(Mass) do
  begin
  M.WriteComponent(Mass[i]);
  M.Position:=0;
  ObjectBinaryToText(M,F);
  end;
  M.Free;
  F.Free;
 end;



Имею файл. В файле (хвала Рандому столько объектов сколько ячеек в массиве. И О УЖАС - во всех объектах одинаковые данные!)

Вот этот файл. Отчетливо видно два экземпляра. А вот данные одни и те же...

object Persones
  Name = 'Olya'
  Sirname = 'fdfd'
  Family = 'fdf'
end
object Persones
  Name = 'Olya'
  Sirname = 'fdfd'
  Family = 'fdf'
end






--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
PsiMagistr
Дата 10.5.2011, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Нечто похожее обсуждается здесь.

http://forum.delphiexpert.ru/index.php?topic=1550.0


Фишка в том, что у меня если надо один объект в файл засейвить, то он худо-бедно сериализуется. А если много в один и тот же файл (Массив объектов и цикл соответственно) - полный обломейшн.

Но не под каждый же объект свой файл заводить? Это ж сколько файлофф  будет?


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Neobrat
Дата 10.5.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 28.8.2007

Репутация: нет
Всего: нет



Цитата(PsiMagistr @ 6.5.2011,  17:11)
Ребята, работе проги это не мешает, но получаю такой варнинг:


[DCC Warning] Unit1.pas(118): W1057 Implicit string cast from 'ShortString' to 'string' 

Впринципе я знаю, что это, но вот как можно от этого избавиться?


Implicit string cast from 'ShortString' to 'string' 
 читайте как
Implicit string cast from 'AnsiString' to 'string'
  с вытекающими отсюда последствиями

так как ShortString как был массив из AnsiChar так и остался.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1336 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.