Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.06.2009, 05:14
madhamster madhamster вне форума
Прохожий
 
Регистрация: 06.06.2009
Сообщения: 4
Репутация: 10
По умолчанию Передача "типа" в функцию

Проблема в следующем, есть к примеру 2 структуры

Код:
type TUser = record

  user_id   : Integer;
  user_name : String[16];
  user_mail : String[32];
  user_age  : Integer;
  cat_id    : integer;

end;

и

Код:
type TCat = record

  cat_id   : Integer;
  cat_name : String[16];
  user_date : String[16];

end;

У меня не получается написать процедуру по чтению файла. В качестве аргументов желательно должны передаватся 1 название файла, 2 название структуры которую использовать для выборки.

Проблема возникает в том как обльявлять локальную файловую переменную функции.

var F :File of //здесь должен быть тип но он должен зависить от структуры которую использую. Наверняка нужно использовать указатели но я перебробовал разные комбинации не получается. Как можно реализовать такую функцию.
Ответить с цитированием
  #2  
Старый 06.06.2009, 10:17
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Если вы уверены, что не будете одновременно пользоваться в переменной полями обоих вариантов структуры, можно использовать условное описание вашего типа:
Код:
TUser = record
  cat_id: Integer;
  case View: Byte of
    1: (user_id   : Integer;
        user_name : String[16];
        user_mail : String[32];
        user_age  : Integer);
    2: (cat_name  : String[16];
        user_date : String[16]);
  end;
Только вы сами должны контролировать то, чтобы данные, записанные в файл, считывались в переменную типа TUser, и в этой переменной использовались именно те поля, которые записывались в файл. При необходимости смотрите подробнее в справке по теме Variant parts in records.

Последний раз редактировалось Nyctos Kasignete, 06.06.2009 в 10:19.
Ответить с цитированием
  #3  
Старый 06.06.2009, 10:53
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

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


в вашем случае достаточно создать 2 нужных класса. В функцию передавать переменную типа TObject. Внутри разбираетесь какой тип передан - и выполняете нужные действия. Единственный минус, что чтение с файла нужно будет ручками делать. File of тип данных - тут уже не подходит.
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:37.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025