Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2011, 17:56   #1
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию Запись, чтение и вывод записей

Доброго времени суток уважаемые эксперты. Возникла необходимость написать несколько проектов на паскале. Объясню что мне необходимо:
По своей сути мне нужно записи записывать в файл и выводить их на экран. Хотелось бы этот процесс автоматизировать, а именно, я передаю указатель на запись в процедуру - процедура пишет в файл. Аналогично с чтением и выводом на экран. Все бы хорошо, но структура записи может быть разной (одинакова в пределах файла), а процедуры я хочу сделать универсальными. И так вопросы:
1. Могу ли я разыменовывать указатель на запись так, чтобы потом записывать в файл как непрерывный поток байтов.
2. Могу ли я разыменовывать указатель на запись так, чтобы потом прочитать из файла как непрерывный поток байтов.
3. Есть ли что-нибудь похожее на Delphi-овый array of const (дабы передать в функцию вывода массив с нужными данными)
4. Есть ли что-нибудь похожее на Delphi-овый as и is (дабы узнать тип переменной, или преобразовать к нужному типу)
Искусственный интеллект - фигня по сравнению с естественной глупостью

Последний раз редактировалось Impuls1989; 02.02.2011 в 17:58.
Impuls1989 вне форума Ответить с цитированием
Старый 02.02.2011, 21:58   #2
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Ну же. Хоть какой-нибудь ответ. Кто-нибудь может сказать что-нибудь полезное?
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 02.02.2011, 23:05   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

1,2 - Можешь. Разыменование указателей присутствует во всех ипостасях Паскаля.

3,4 - Зависит от ипостаси Паскаля. К примеру, в Турбо этим даже не пахнет.

Последний раз редактировалось mss; 02.02.2011 в 23:07.
mss вне форума Ответить с цитированием
Старый 02.02.2011, 23:27   #4
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
1,2 - Можешь. Разыменование указателей присутствует во всех ипостасях Паскаля.

3,4 - Зависит от ипостаси Паскаля. К примеру, в Турбо этим даже не пахнет.
Т.е. С чтением-записью проблем не будет? А если не секрет. Каким образом нужно передавать запись в функцию?
Код:
procedure WrieData(data:^pointer);
var f:file;
begin
   ...
   Writeln(f, &data);
end;
Так будет выглядеть процедура записи? Или я что-то путаю? Мне в процедуру нужно передавать указатель на несколько разных видов записей.

Насчет 2-3. Может знаете какой-то более хитрый способ создания универсальных процедур, способных принимать разные виды записей? Буду признатлен.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 02.02.2011, 23:42   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Код:
procedure WriteData(var Data; Size: Integer);
begin
  BlockWrite(F, Data, Size);
end;
или

Код:
procedure WriteData(Data: Pointer; Size: Integer);
begin
  BlockWrite(F, Data^, Size);
end;
Важно: запись НЕ должна содержать поля типов данных с управляемым временем жизни, такие как String, только generic-типов !

По поводу "универсальности" - она возможна лишь при поддержке конкретной Паскаль-ипостасью RTTI - информации о типах времени выполнения.
mss вне форума Ответить с цитированием
Старый 03.02.2011, 01:04   #6
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Важно: запись НЕ должна содержать поля типов данных с управляемым временем жизни, такие как String, только generic-типов !

По поводу "универсальности" - она возможна лишь при поддержке конкретной Паскаль-ипостасью RTTI - информации о типах времени выполнения.
А если string[100] например - тут ведь длина строки определена четко, и под нее выделяется конкретное число байт.
Насчет полной универсальности - это понятно что нельзя...

А по поводу "красивого" вывода так никаких идей и не возникает?
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP, MYSQL чтение записей Delphinchik PHP 2 08.12.2010 20:03
Поиск записей и запись в другую таблицу maratmarat Microsoft Office Excel 3 10.07.2010 00:59
Запись в несколько таблиц нескольких записей Лубышев SQL, базы данных 8 09.04.2010 17:42
Чтение нескольких записей в TList ? spamer Общие вопросы Delphi 10 30.10.2009 17:07
Последовательное чтение записей artemavd БД в Delphi 32 09.09.2009 20:14