IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Как создать типизированный файл, file of
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Всем привет! Почитал про типизированные файлы на форуме но так и не наашёл решение своей проблемы.
Хочу создать типизированный файл в который будут писать числа типа real.


const n = 8;
{type numbers = record
num : real;
end;}
type numbers = file of real;
var fname : string;
i : integer;
sum, k : real;
ans : char;
f1 : numbers;

function fi(p: integer): real;
var i : integer;
sum : real;
begin

sum := sqrt(3 * p);
for i := p downto 1 do
if (i = 1) then
fi := sum
else
sum := sqrt(sum + 3 * (i - 1));
end;

procedure newfile(var f1 : numbers);
var s : string;
num : real;
{with num_ref do}
begin
rewrite(f1);
{write(f1, num_ref);}
for i := n downto 1 do
begin
if (i = 1) then
begin
num := sqrt(3);
writeln(f1, num);
break;
end
else
begin
writeln(f1, fi(i));
end;
end;
close(f1);
end;

procedure outputfile(var f1 : numbers; p : integer);
var s : string;

begin
reset(f1);
repeat
readln(f1, s);
write('f', p, '=');
writeln(s);
dec(p);
until eof(f1);
end;

begin
clrscr;
writeln('Create a new file?');
readln(ans);
ans := upcase(ans);
if (ans = 'Y') or (ans = 'YES') then
begin
writeln('Enter name a file');
readln(fname);
assign(f1, fname);
newfile(f1);
outputfile(f1, n);
end
else
begin
writeln('What file you want open?');
readln(fname);
assign(f1, fname);
outputfile(f1, n);
end;
readln;
end.



Пишет инвалидный тип файла. Помогите разобраться...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Данные в типизированный файл не пишутся через WriteLn, только через Write...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Ага. volvo заменил writeln на write, но только теперь почему то на консоль выводит то что мне надо, а вот в файле абракадабра получается blink.gif
Вот такой отредактированный код.

const n = 8;
type numbers = file of real;
var fname : string;
sum, k : real;
ans : char;
f1 : numbers;

function fi(var p: integer): real;
var i : integer;
sum : real;
begin

sum := sqrt(3 * p);
for i := p downto 1 do
if (i = 1) then
fi := sum
else
sum := sqrt(sum + 3 * (i - 1));
end;

procedure newfile(var f1 : numbers);
var s : string;
num : real;
i : integer;
begin
rewrite(f1);
for i := n downto 1 do
begin
if (i = 1) then
begin
num := sqrt(3);
write(f1, num);
break;
end
else
begin
num := fi(i);
write(f1, num);
{write(f1, fi(i));}
end;
end;
close(f1);
end;

procedure outputfile(var f1 : numbers; p : integer);
var s : real;
begin
reset(f1);
repeat
read(f1, s);
write('f', p, '=');
writeln(s);
dec(p);
until eof(f1);
end;

begin
clrscr;
writeln('Create a new file?');
readln(ans);
ans := upcase(ans);
if (ans = 'Y') or (ans = 'YES') then
begin
writeln('Enter name a file');
readln(fname);
assign(f1, fname);
newfile(f1);
outputfile(f1, n);
end
else
begin
writeln('What file you want open?');
readln(fname);
assign(f1, fname);
outputfile(f1, n);
end;
readln;
end.



Это вывод на консоль.
[IMG]http://ipicture.ru/uploads/071214/TWOsF6aW2Z.JPG[/IMG]
А это что в файле.

‚WХA‚шй3‚cэ¬‚^п
‚-!Фж‚I pД‚Жд
gЃГBЧі]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
а вот в файле абракадабра получается
А вот смотреть блокнотом не надо типизированные файлы, они содержат не символьное представление информации (как текстовые), а битовое, машинное представление... То есть, просто берется кусок из памяти и пишется в файл (в твоем случае - 6 байт, посмотри что там хранится - поиск по слову IEEE), а Блокнот думает что там записаны байтовые коды символов... Представляешь, как он жестоко ошибается? smile.gif

Читать типизированный файл надо опять же в программой на Паскале - тогда память опять заполнится правильно (если тип файла совпадает), и ты получишь разумные данные...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Так я так и не понял что надо сделать то? unsure.gif
Как тогда надо записать данные в файл что бы можно было посмотреть блокнотом или ещё чем то? Или в блокноте просто надо опции какие то поменять? Или надо поставить другое расширение файла?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Как тогда надо записать данные в файл что бы можно было посмотреть блокнотом
Значит, надо создавать НЕ типизированный, а текстовый файл. Блокнот (или еще что-нибудь) - это текстовый редактор.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Окей. А чем посмотреть тогда типизированный файл или как записать типизированный файл что бы можно ьбыло его посмотреть?

Сообщение отредактировано: kosya4ok -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Типизированный файл при желании можно посмотреть hex-редактором. Что ты там сможешь понять - это другое дело.
Но, вообще-то, для просмотра предназначен как раз текстовый формат, а типизированный файл принципиально не предназначен для того, чтобы его смотреть глазами.
Ты уж вибери, что тебе надо: типизированный или смотреть.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Ясно. Спасибо за понятный ответ. А то народ никак не может внятно объяснить с этим типизированным файлом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






dry.gif Сколько же можно тебе объяснять? Тебе поста №4 не хватило, чтобы догадаться зайти в Google и набрать IEEE? И посмотреть, ЧТО будет храниться в файле? Почему все время надо с ложечки кормить?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Так а сколько ты нормально раз объснял?Покажи. Зашёл и набрал IEEE вот чё вывалило

www.ieee.org
ieeexplore.ieee.org
www.computer.org
www.spectrum.ieee.org и т.д. в таком же духе

И интересно какую можно из этого всего извлечь информацию? И причём здесь ложечки кормить?
Почему не ответить так что бы больше не возникало вопросов, а отвечаешь так что больше вознкиает вопросов чем ответов?

Лано, буду тему закрывать так как всё в принципе выянил. Всем кто участвовал спасибо за помощь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Вдогонку: чем смотреть типизированный файл?
Специальным написанным тобой просмотрщиком, ориентированным на файлы заданногоо тобой типа. Этот просмотрщик должен читать из файла бинарные данные, преобразовывать их в текст и этот текст показывать тебе на экране. (а, может, - преобразовывать в графику и показывать изображение... Смотря для чего задумывался такой тип файла)

PS. А по поводу ссылок тебе все правильно сказали. Информацию можно извлечь как раз о том, как следует группировать и интерпретировать те коды, которые ты безуспешно пытался просмотреть текстовым редактором.

PPS. Да, volvo, я что-то запамятовал, правда ли, что 6-байтовый real действительно стандартизован? Мне казалось, что стандартизованы только single и double, а real - частный формат, ориентированный на обработку без FPU.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Я не понимаю как мона сгруппировать и извлечь информацию из данного типизированного файлас помощью блокнота или ещё чего то там. Мона показать пример?

ЗЫ Не понял, всмысле просмотрщик файла?Ведь у меня функция и выводит бинарные данные из файла, но только на консоль.


procedure outputfile(var f1 : numbers; p : integer);
var s : real;
begin
reset(f1);
repeat
read(f1, s);
write('f', p, '=');
writeln(s);
dec(p);
until eof(f1);
end;



Или ты что то другое имеел ввиду?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата
правда ли, что 6-байтовый real действительно стандартизован? Мне казалось, что стандартизованы только single и double, а real - частный формат, ориентированный на обработку без FPU.
mega_chok.gif

32-битные компиляторы не доведут до добра. Привычка, что real = double... Ну, а по поводу формата 6-байтного real - в частности можно посмотреть здесь: http://de.uspu.ru/Informatics/Metodes/DPP/...glavs/4/433.htm
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(kosya4ok @ 14.12.2007 21:04) *

Я не понимаю как мона сгруппировать и извлечь информацию из данного типизированного файлас помощью блокнота или ещё чего то там. Мона показать пример?
С помощью блокнота - никак.
Точка.
(кажется, тебе это повторили уже 3 раза)
Цитата

ЗЫ Не понял, всмысле просмотрщик файла?Ведь у меня функция и выводит бинарные данные из файла, но только на консоль.
А твоя программа и есть простенький консольный просмотрщик типизированного файла. Т.е. для просмотра такого файла нужно пользоваться ею ВМЕСТО блокнота.


Добавлено через 9 мин.
Цитата(volvo @ 14.12.2007 21:16) *
32-битные компиляторы не доведут до добра. Привычка, что real = double...
С чего это вдруг?
Последние несколько лет пользуюсь ТОЛЬКО 32-разрядными компиляторами и никакого "недобра" еще не почувствовал.
Может, я что-то не так делаю?

Кстати, real вообще НИКОГДА не использую.
И еще: real = double связано все-таки не с 16- или 32-разрядностью, а с тем, что к моменту появления этих 32-разрядных FPU стал непременным атрибутом ЛЮБОГО компьютера, т.к. переселился внутрь CPU. Соответственно, надобность в real, оптимизированном на обработку CPU, отпала. А на FPU он обсчитывается заметно дольше, чем поддерживаемые аппаратно single или double.
Цитата
Ну, а по поводу формата 6-байтного real - в частности можно посмотреть здесь: http://de.uspu.ru/Informatics/Metodes/DPP/...glavs/4/433.htm

Посмотрел.
Ничего для себя интересного не обнаружил.
Я спрашивл: стандартизирован ли 6-байтовый real, или это исключительно "местное" изобретение Борланд?
Даже в 48-разрядной БЭСМ-6 формат представления вещественных данных (т.е. той же длины - 6 байт) был другим.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Цитата(kosya4ok @ 14.12.2007 21:04)

Я не понимаю как мона сгруппировать и извлечь информацию из данного типизированного файлас помощью блокнота или ещё чего то там. Мона показать пример?
С помощью блокнота - никак.
Точка.
(кажется, тебе это повторили уже 3 раза)

Вот блин народ! Та я понял что с помощью блокнота что не смогу! Я ж спрашиваю как можно сгруппировать эти символы без блокнота, так как вы сами мне об этом написали!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Группировать по 6 байтов (48 битов).
А что конкретно означают какие биты - по тем ссылакам, что тебе дал поисковик.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






СПС всем !!ТЕМА закрыта!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


А вы не объясните почему вот так вот можно писать в файл


num := fi(i);
write(f1, num);



А вот так вот нельзя.


num := fi(i);
write(f1, fi(i));

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(kosya4ok @ 14.12.2007 23:43) *

А вы не объясните почему ... вот так вот нельзя.
write(f1, fi(i));

Грубо говоря, параметры оператора Write всегда передаются по адресу (по ссылке). Функция - это сложная структура, которая предусматривает передачу управления и возвращение значения. Когда ты пишешь так, то ты на самом деле как бы указываешь оператору Write адрес перехода, хотя он ожидает адрес той области памяти, которую тебе надо вывести на печать. Если бы компилятор не отловил ошибку, ты бы получил на печати совсем не то, что ожидал smile.gif.
Это был образный ответ, упрощенный. На самом деле все сложнее, конечно. Но в случае с типизированными файлами довольно близко к действительности.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 3:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name