|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.06.2011, 09:06 | #11 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
видимо придется делать именно так как я сказал в 7 посте.
я пишу реализацию на месте обьяления, это перенесете как положено. Код:
то есть у такого класса примерно выйдет так. Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
01.06.2011, 09:14 | #12 |
Пользователь
Регистрация: 21.04.2010
Сообщений: 15
|
Вы опять меня не поняли... Я объявил объект и описал в нем методы GetText и SetText, которые заполняют объект символами из строки и наоборот, формируют из объекта строку.
Код:
Вопрос сейчас в том, чтобы задать размер для каждого конкретного объекта. Код:
|
01.06.2011, 09:21 | #13 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
Цитата:
попробуйте тогда. задать длину массива это SetLength(Array,<длина>); Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 01.06.2011 в 09:25. |
|||
01.06.2011, 09:39 | #14 | |
Пользователь
Регистрация: 21.04.2010
Сообщений: 15
|
Цитата:
Код:
Совсем честно - я работаю в Lazarus (Free Pascal). Дин массивы (как и WideString) в файл пишутся в виде указателя, потому и извращаюсь. Использовал бы ShortString и не парился, но нужен Юникод, туды его в качель... |
|
01.06.2011, 09:49 | #15 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Сам себе геморрой придумал и теперь героически его лечишь)
К чему этот object ? Нет у него в дан.случае никаких преимуществ перед class. type TWString=class(TComponent) .. private FText: WideString; .. protected .. procedure SetText(Value: WideString); .. published .. property Text: WideString read FText write SetText; .. end; implementation .. var WString: TWString; .. SomeStream.WriteComponent(WString); // запись объекта в стрим .. SomeStream.ReadComponent(WString); // чтение объекта из стрима без регистрации класса, экз-р WString должен на этот момент существовать ! .. WString := SomeStream.ReadComponent(nil); // чтение объекта из стрима с предварительной регистрацией класса, экз-р WString будет создан автоматически, если где-то ПЕРЕД этим была выполнена регистрация класса RegisterClass(TWString) И всё !) И вуаля !) Всю заботу о чтении-записи опублик.св-в объекта берет на себя встроенная в RTL стриминг-система Delphi |
01.06.2011, 13:13 | #16 |
Пользователь
Регистрация: 21.04.2010
Сообщений: 15
|
Нет, не дошло... Я честно пытался понять, но никак.
1. Ладно, про private/protected/published я еще почитаю, чтобы понять, в чем отличия. 2. property Text: WideString read FText write SetText; что значит "read FText" и "write SetText"? SetText - это, надо полагать, моя процедура заполнения массива строкой? Но ведь массива в описанном вами классе уже нет. 3. Как превратить файл в Стрим и что значит регистрация класса? |
01.06.2011, 15:27 | #17 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
есть такое слово, сериализация.
хотя, в твоём случае, это из пушки по воробьям. Храни 500 символов и не трать время, диски сейчас огромные, памяти завались, экономить 940 байт можно только в том случае, если планируется хранить миллиарды записей. Чтобы длина не терялась, её можно хранить в поле типа Integer перед массивом символов. > Использовал бы ShortString и не парился, но нужен Юникод, туды его в качель.. путаем белое и горячее. Что мешает хранить UTF8 в ShortString?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
01.06.2011, 15:55 | #18 | |
Пользователь
Регистрация: 21.04.2010
Сообщений: 15
|
Цитата:
А насчет белого и горячего - ShortString - это ВСЕГДА 1 байт на символ. А кириллица в UTF8 пишется ДВУМЯ байтами. |
|
01.06.2011, 15:57 | #19 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
01.06.2011, 15:58 | #20 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> Длину пишу в интежер, если вы невнимательно смотрели описание объекта.
каюсь, невнимательно ) > ShortString - это ВСЕГДА 1 байт на символ. А кириллица в UTF8 пишется ДВУМЯ байтами. да хоть десятью, какая разница?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как записать файл UNICODE ? | MakTpaxep | Общие вопросы C/C++ | 0 | 24.02.2011 17:05 |
как создать проект содержащий ОДИН файл в visual | LOST94 | Visual C++ | 4 | 23.06.2010 16:17 |
Дан файл, содержащий текст на русском языке.Составить в алфавитном порядке список слов в файл. | JiLiYa | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 26.12.2008 12:05 |
Как записать файл в файл программы? | Хамяг | Общие вопросы Delphi | 2 | 02.11.2008 16:01 |
как записать record в файл | Kn793 | Общие вопросы Delphi | 5 | 01.08.2008 08:10 |