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

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

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

 
 Ответить  Открыть новую тему 
> типизированные файлы
сообщение
Сообщение #1


Новичок
*

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

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


Разработать программу для обработки данных типизированного файла. Обработка данных должна включать процедуры без параметров:
Для вывода шапки таблицы;
Для вывода данных одной записи;
Для создания файла;
Для дополнения файла новыми записями;
Для записи данных в файл;
для записи данных файла;
Для чтения данных файла;
Для модификации ряда записей файла;
Для поиска записей файла с выводом найденных записей или сообщения о неуспешном поиске по поисковому признаку;
Удаления записей из типизированного файла следующим образом: поиск удаляемой записи; сдвиг (в случае успешного поиска) всех записей, расположенных после удаляемой записи, к началу файла; после удаления производится усечение файла.
Структура файла:
Абонентская плата за телефон
Ф.И.О. абонента Телефон Год установки Количество абонентов Плата за телефон

Поисковые признаки: абоненты, имеющие задолженность; год установки до 1980 года.


Начала делать так: ток чет ниче не выходит, кроме шапки таблицы unsure.gif dry.gif

Program zadacha2;
Uses crt;
procedure tabl;
begin
writeln('abonentskaya plata za telefon­');
writeln(' ----------------------------------------------------------------- ');
writeln('| FIO | telefon­ | god | kolichestvo | plata za  |');
writeln('| abonenta  | | ystanovki | abonentov | telefon ­ |');
writeln(' ----------------------------------------------------------------- ');
end;
procedure danzap;
type str=record
FIO:string[30];
tel:longint;
god:integer;
kab:integer;
plt:integer;
end;
const name:string='H:\Program Files\TurboPascal7.1\« Ў  ь4\2.dat';
var p:char;t:str; f:text;
begin
Assign(f,name);
Reset(f);
readln(f,t.FIO,p,t.tel,t.god,t.kab,t.plt);
Close(f);
end;
procedure sozd;
var f:file;
begin
Assign(f,'2.dat');
Rewrite(f);
Close(f);
end;
procedure dop;
var f:text; a:string;
begin
Assign(f,'3.dat');
Append(f);
writeln('dopolnite file');
read(a);
Close(f);
end;
procedure zap;
var f:text; a:string;
begin
Assign(f,'2.dat');
Rewrite(f); Reset(f);
writeln('Vvedite dannue');
readln(f,a);
Close(f);
end;
procedure cht;
var f:text; a,b:string;
begin
Assign(f,'2.dat');
Reset(f);
Write(f);
close(f);
end;
Var f:text; a:string;
Begin
Clrscr;
tabl;
danzap;
sozd;
dop;
zap;
cht;
readln;
End.

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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


ну, во-первых, по-моему, имеет смысл сделать тип str доступным по все программе, а не только в danzap
далее
Цитата
Для вывода шапки таблицы;

это ты сделала
Цитата
Для вывода данных одной записи;

procedure danzap;
const name:string='H:\Program Files\TurboPascal7.1\« Ў ь4\2.dat';
var p:char;t:str; f: file of str;
begin
Assign(f,name);
Reset(f);
read(f,t);
write(t.FIO,' ',t.tel); {здесь же можешь вывести и остальные поля - просто не стала набирать их}
Close(f);
end;

Но в таком виде она всегда будет выводить первую запись.
На мой взгляд, это бессмысленно. Логичнее открытывать файл, а потом вызывать эту процедуру - можно не один раз.

Цитата
Для создания файла;

Ты сделала.

Цитата
Для дополнения файла новыми записями;

А зачем ты делаешь а строкой?! Файл же типизированный, пишем в него записи. Вот с записями и работай.
Только не забывай перемещать указатель в конец файл с помощью seek - а то запишешь поверх другой записи.

..продолжение следует.
пока разберись с этим


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Спасибо за ответ!
Я кое-что исправила
procedure zap;
var f:text; a:str; p:char;
begin
Assign(f,'2.dat');
Rewrite(f); Reset(f);
p:=' ';
writeln('Vvedite dannue');
read(a.FIO,p,a.tel,p,a.god,p,a.kab,p,a.plt);
Close(f);
end;


procedure danzap;
var p:char;t:str; f:text;
begin
Assign(f,'2.dat');
Reset(f); p:=' ';
read(f,t.FIO,p,t.tel,p,t.god,p,t.kab,p,t.plt);
write(t.FIO,p,t.tel,p,t.god,p,t.kab,p,t.plt);
Close(f);
end;

Пришлось в read перечислить все записи, иначе выдает ошибку.

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

насчет seek... написала так: seek(f,filesize(f)). Но пишет, что файловый тип не правильный.

Переделала чтение файла:
procedure cht;
var f:text; a,b:str; p:char;
begin
Assign(f,'2.dat');
Reset(f);
p:=' ';
Repeat
Read(f,a.FIO,p,a.tel,p,a.god,p,a.kab,p,a.plt);
write(a.FIO,p,a.tel,p,a.god,p,a.kab,p,a.plt);
until Eof(f);
close(f);
end;

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


Профи
****

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

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


f : file of str, если ты работаешь с записями в файле.


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Цитата(Tan @ 6.05.2007 21:03) *

f : file of str, если ты работаешь с записями в файле.


Тогда он в Append(f) пишет, что не правильный формат...
Файл же состоит не только из записей, но и из пробелов
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Тогда он в Append(f) пишет, что не правильный формат...
Проблема не в этом... Проблема здесь - в том, что Append вообще неприменима к типизированному файлу - только к текстовому...

Зачем вообще Append? Все и без него прекрасно реализуется:
Seek(f, FileSize(f));

и следующая операция Write(f, ...) запишет компоненту в конец файла...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

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

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


Если задание на типизированные файла, то в твоём случае там должны быть только записи, зачем пробелы ? Ты должен читать всю запись сразу, а не пытаться прочитать её поле определённого типа, то есть нельзя просто не обратившись к записи читать что - то другое (на будущее).

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


А теперь выдает ошибку чтения диска...
procedure cht;
var f:file of str; a,b:str; p:char;
begin
Assign(f,'2.dat');
Reset(f);
p:=' ';
Repeat
Read(f,a);
write(f,a);
until Eof(f);
close(f);
end;

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

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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Цитата
Read(f,a);
write(f,a);

это что за деятельность? считали запись и сразу пишем ее на место следующей?
а зачем?
так с eof неизвестно что будет твориться...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Я пытаюсь разобраться, даже что-то уже получается, только вот не могу понять чем ему не нравится
read(f,a);
пишет: Error 100: Disk read error.
По книжке хорошей посмотрела, там тоже так же написано: read(f,z); z-тоже запись
странно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Возможно, файл не открыт.
Или ты читала-читала, а он закончился.

Если ты про эту процедуру - обрати внимание на мое прошлое замечание.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


Цитата(мисс_граффити @ 9.05.2007 17:21) *

Возможно, файл не открыт.
Или ты читала-читала, а он закончился.

Если ты про эту процедуру - обрати внимание на мое прошлое замечание.

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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


выложи, как на данный момент выглядит твоя прога. можно прикрепить pas-файл


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


Вот: вроде с диском исправила, осталось только поправить косяки с процедурой modif и понять, почему если вводишь не 1 запись, а две, то читает только последнюю!


Прикрепленные файлы
Прикрепленный файл  999попытка.pas ( 4.12 килобайт ) Кол-во скачиваний: 382
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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