Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Типизированные файлы


Автор: REVOLT 20.11.2004, 10:12
Ну теперь топик два! обясните плиз что такое типизированные файлы... и как с ними работать

Автор: Satana 20.11.2004, 11:21
Типизированные файлы - это файлы в которых данные хранятся в бинарном формате,

наппример:

Код

type cost=record
 cena:real;
 naimenovanie:string;
end;
// описание файла будет таким:
var
f:file of cost;
peremennaya:cost;

begin
assignfile(f,'file_name');
rewrite(f);
peremennaya.cena:=10;
peremennaya.naimenovanie:='something';
wirte(f,peremennaya); //Добавляется одна запись из 2х полей в файл
end;

Точно также можно использовать файлы типа f:file of integer и т.п.

Автор: REVOLT 20.11.2004, 11:35
Скажи как из 4-х текстовых полей записать данные в файл
И как их стчитать оттуда... smile

Автор: Alex 20.11.2004, 12:07
Satana Милый друг, будь так любезен проверять свой код перед публикацией в среде разработки. smile

И если не уверен в ответе то не отвечать. Тот пример, что ты дал НИКОГДА не будет работать т.к. в типизированный файл НЕЛЬЗЯ записывать длинные строки (String).
Добавлено @ 12:10
REVOLT и Satana Настоятельно советую прочитать статью http://forum.vingrad.ru/index.php?showtopic=1924

Автор: Satana 20.11.2004, 12:35
А я и не писал что это рабочий код, а для прмера я считаю самое оно...

Автор: Medved 20.11.2004, 13:03
Цитата(Alex @ 20.11.2004, 15:07)
И если не уверен в ответе то не отвечать. Тот пример, что ты дал НИКОГДА не будет работать т.к. в типизированный файл НЕЛЬЗЯ записывать длинные строки (String).


Можно записывать строки типа ShortString.

Код

type cost=record
 cena:real;
 naimenovanie:string[255]; //--------- fixed
end;
// описание файла будет таким:
var
f:file of cost;
peremennaya:cost;

begin
assignfile(f,'file_name');
rewrite(f);
peremennaya.cena:=10;
peremennaya.naimenovanie:='something';
write(f,peremennaya);
CloseFile(f); //--------- fixed thanks Alex
end;


Вот так работать должно.

Автор: Medved 20.11.2004, 13:46
А вообще правильно такие вещи оформлять в таком виде. Вот пример из моего проекта который я делал совместно с младшим братом, это игра в танчики:

Код

unit uSetting;

interface

uses uGlobal,Windows;

type
 TSettingRecord = packed record //структура настроек игры
   BitCount: word; //количество цветов;
   ScrWidth: word; //ширина экрана
   ScrHeight: word; //высота экрана
   MapSize: word; //размер игрового поля в пикселях
   Square:word;//размер квадрата
   Space:word;// отступ игрового поля с лева и с верху
 end;

 TSettingGame = class //Настройки игры
 private
   FSetting: TSettingRecord;
 public
   property Setting: TSettingRecord read FSetting write FSetting;
   function LoadSetting(): word;
   function SaveSetting(ASetting: TSettingRecord; ARefresh: boolean): word;
 end;


implementation

function TSettingGame.LoadSetting(): word;
var
 vSettingFile: File of TSettingRecord;
 vSetting: TSettingRecord;
begin
 result := 0;//все ок

 AssignFile(vSettingFile,cFileSetting);

 try
   try
   {$I-}
   Reset(vSettingFile);
   {$I+}
   if IOResult <> 0 then
   begin
     MessageBox(0,PChar('Файл "'+cFileSetting+'" не найден!'),'Ошибка',MB_OK+MB_ICONERROR);
     result := 2; //неполучается открыть файл
     exit;
   end;

   read(vSettingFile, vSetting);

   Setting := vSetting;

   except
     MessageBox(0,'Ошибка при загрузке настроек!','Ошибка',MB_OK+MB_ICONERROR);
     result := 1; //неизвестная ошибка
     exit;
   end;

 finally
   CloseFile(vSettingFile);
 end;
end;

function TSettingGame.SaveSetting(ASetting: TSettingRecord; ARefresh: boolean): word;
var
 vSettingFile: File of TSettingRecord;
begin
 result := 0;//все ок

 AssignFile(vSettingFile,cFileSetting);

 try
   try
   {$I-}
   Rewrite(vSettingFile);
   {$I+}
   if IOResult <> 0 then
   begin
     MessageBox(0,PChar('Файл "'+cFileSetting+'" не найден!'),'Ошибка',MB_OK+MB_ICONERROR);
     result := 2; //неполучается открыть файл
     exit;
   end;

   write(vSettingFile, ASetting);

   if ARefresh then
   begin
     Setting := ASetting;
   end;

   except
     MessageBox(0,'Ошибка сохранения настроек!','Ошибка',MB_OK+MB_ICONERROR);
     result := 1; //неизвестная ошибка
     exit;
   end;

 finally
   CloseFile(vSettingFile);
 end;
end;

end.

Автор: Zero 20.11.2004, 16:27
REVOLT, я тоже не люблю когда меня, отправляют что-нибудь читать, но в данном случае я бы посоветовал прочитать про них литератупу, там не много. Я тоже первый раз подумал что раз звучит слово файл, то это что-то сверх естественное, но а в течении 2-ух часов понял, что работа с файлами это самая лёгкая тема... smile

Автор: Medved 20.11.2004, 17:01
Цитата(Zero @ 20.11.2004, 19:27)
REVOLT, я тоже не люблю когда меня, отправляют что-нибудь читать


С такой нелюбовью Вы мало чему научитесь. ИМХО я не встречал еще ни одного профессионала, который бы позволил себе высказывание, подобного рода.

Автор: Zero 20.11.2004, 17:11
Извини Pegas, возможно я не так выразился...я просто имелл ввиду, что когда задаёш вопрос по какой-нибудь сложной теме в которую нужно долго вникать чтобы понять, а вопрос к примеру важный, и если начинают предлогать что-нибудь прочитать к примеру ─ то чтобы понять которое нужно знать ресурс 2, а сам при этом незнаеш ресурс 1, ну и в этом роде, а не про то что можно выучить за 1 час, про которое ты подумал...

Автор: Alex 20.11.2004, 18:13
Цитата(Zero @ 20.11.2004, 17:11)
Извини Pegas, возможно я не так выразился...я просто имелл ввиду, что когда задаёш вопрос по какой-нибудь сложной теме в которую нужно долго вникать чтобы понять, а вопрос к примеру важный, и если начинают предлогать что-нибудь прочитать к примеру ─ то чтобы понять которое нужно знать ресурс 2, а сам при этом незнаеш ресурс 1, ну и в этом роде, а не про то что можно выучить за 1 час, про которое ты подумал...

Что же ты будешь делать в ситуации, когда на твой вопрос народ ответа знать не будет?
Если не привыкнешь читать документацию и лазить по чужим кодам на маленьких задачах, то не сможешь понять, как решить серьезный вопрос.

Автор: Zero 20.11.2004, 20:35
Alex, я же говорю, что не имел ввиду, что вообще не люблю, читать документации...
А в определённых случаях они быват неуместными...
А к примеру, какие-либо вещи чтобы узнать я и сам всегда читаю это либо в книге по Delphi про определённый компонент, либо ещё где-нибудь.
Но раз уж вы заговорили про это, то вот вам пример:
представь, вот ты читаешь, какую-нибудь статью, или что-нибудь, в чём тебе нужно разобратся, и не можеш сам понять как это должно работать, потом пишеш вопрос в форум, а тебе пишут ответ читай литературу, да ещё укажут на ту же которую сам только прочитал, как тогда тебе понравится это или нет... smile Только не говори что если ты найдёш литературу, которая написана в тему, то ты всегда её разберёш, я по своему опыту знаю что это не так...

Автор: Alex 20.11.2004, 20:43
Цитата(Zero @ 20.11.2004, 20:35)
представь, вот ты читаешь, какую-нибудь статью, или что-нибудь, в чём тебе нужно разобратся, и не можеш сам понять как это должно работать, потом пишеш вопрос в форум, а тебе пишут ответ читай литературу, да ещё укажут на ту же которую сам только прочитал, как тогда тебе понравится это или нет...  Только не говори что если ты найдёш литературу, которая написана в тему, то ты всегда её разберёш, я по своему опыту знаю что это не так...

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

Автор: Zero 20.11.2004, 21:34
Цитата
Вопрос должен быть задан нормально, что бы тебя не отсылали к тому материалу, который у тебя вызвал затруднение

Alex, именно этого ответа, я от тебя и добивался, чтобы ты сам подтвердил, что не всегда любишь, когда тебя отсылают что-нибудь читать... Я надеюсь теперь то вы с Пегасом поняли про что я имелл ввиду??? smile

Автор: Alex 20.11.2004, 21:47
Цитата(Zero @ 20.11.2004, 21:34)
Alex, именно этого ответа, я от тебя и добивался, чтобы ты сам подтвердил, что не всегда любишь, когда тебя отсылают что-нибудь читать... Я надеюсь теперь то вы с Пегасом поняли про что я имелл ввиду???

Я говорю о том, что если вопрос задать правильно, то тебя и не отправят ничего читать.

Автор: Zero 20.11.2004, 22:07
Ладно, не будем спорить, ни к чему хорошему он не приведёт...

Автор: Medved 20.11.2004, 23:38
Я понял Zero Вашу мысль. Вы говорите, что иногда на форуме, могут ответить линком на статью, которая не дает ответа на Ваш вопрос. Но в которой говориться о той теме, к которой относиться Ваш вопрос.
Но опять же. Это проблема как сказал Алекс - постановки вопроса. Если бы Вы конкретно посттавили вопрос, расписав что-да как, и что именно вызывает у Вас затруднение - тогда Вам или дадут ссылку на ту статью, где точно дан ответ на вопрос, или ответят, или не ответят.

А если вопрос задан "коряво", очень размазано и непонятно, то соответственно дадут линк на ту статью, которая так же размазано и отвечает на вопрос.

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

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

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

Автор: Vit 21.11.2004, 17:10
Раз уж тут такой офтоп пошёл вставлю и свои 3 копейки по поводу отсылок к литературе... Я сам не люблю когда отсылают не отвечая. Но есть иногда случаи когда не отослать невозможно. Например вопросы типа: "А как мне запомнить число в базе данных" - такой вопрос говорит о том что пример кода в данном случае не поможет, человек вообще не имеет понятия о предмете, и ему хочешь не хочешь прийдётся прочитать пару глав по работе с базами данных...


Автор: Zero 21.11.2004, 17:45
Цитата
Я сам не люблю когда отсылают не отвечая. Но есть иногда случаи когда не отослать невозможно. Например вопросы типа

Наконец то, нашолся человек который меня срау понял... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)