Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 1
Регистрация: 25.03.2018
Сообщений: 16

Чтение записей из типизированного файла

25.03.2018, 18:57. Показов 4908. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пытаюсь реализовать чтение записей из типизированного файла. Использую массив, дабы потом провести сортировку по одному из признаков.

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

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
type
info=record
fio:string[7]; //Фамилия, Имя, Отчество
number:integer; //Номер читательского билета
amount:integer; //Количество книг на руках
warn:integer; //Количество нарушений
end;
var
users:file of info;
i:1..3;
name:string[12];
work:array[1..3] of info;
Procedure Name_File;
begin
write('Введите имя файла данных ');
Readln(name);
End;
Procedure OutputRec;
Begin
Read(users,work[i]);
with work[i] do
begin
write('Запись №',FilePos(users),';');
Writeln('Ф.И.О: ',fio);
Writeln('Номер читательского билета: ',number);
Writeln('Количество книг на руках: ',amount);
Writeln('Количество нарушений при использовании библиотеки: ',warn);
end;
end;
procedure OutputAllRec;
begin
Name_File;
Assign(users,name);
{$I-}
Reset(users);
{$I+}
if IOResult=0 then
begin
writeln('Вывод базы данных из файла ',name);
 for i :=1 to 3 do
   if (not Eof(users)) then
     OutputRec;
End
Else
Writeln('Файла с именем '+name+' на диске нет');
end;
{Procedure shell(n:integer);
var
incr,j:integer;
x:info;
begin
  incr := n div 2;
  while incr > 0 do 
  begin
    for i := incr + 1 to n do
    begin
      j := i - incr;
      while j > 0 do
        if (work[j].amount>work[j+incr].amount) then
        begin
x:=work[j];
work[j]:=work[j+incr];
work[j+incr]:=x;
          j := j - incr;
        end
        else
          j := 0;
    end;
    incr := incr div 2;
  end;
end;}
begin
OutputAllRec();
//shell(15);
writeln('Применение обратной сортировки по количеству книг');
  writeln('*---------------------------------------------------*-----------------*--------*---------*');
  writeln('|                  ФИО                              |      Билет      |  Книги |Нарушения|');
  writeln('*---------------------------------------------------*-----------------*--------*---------*');
for i:=3 downto 1 do
 // writeln('|', work[i].fio:51,'|',work[i].number:17,'|', work[i].amount:8, '|', work[i].warn:9, '|');
  writeln('*---------------------------------------------------*-----------------*--------*---------*');
end.
Сам же файл выглядит так -
ASDaasd
1
25
2

asfafs
2
35
1

Muraveeev
3
1
2
Вывод -
Введите имя файла данных block
Вывод базы данных из файла block
Запись №1;Ф.И.О: SDaasd
1
25
2
Номер читательского билета: 2609
Количество книг на руках: 13618
Количество нарушений при использовании библиотеки: 12810
Запись №2;Ф.И.О:
asfafs
2

Номер читательского билета: 12810
Количество книг на руках: 13066
Количество нарушений при использовании библиотеки: 2613
Запись №3;Ф.И.О:

Muraveeev
3
Номер читательского билета: 25957
Количество книг на руках: 30309
Количество нарушений при использовании библиотеки: 13066
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.03.2018, 18:57
Ответы с готовыми решениями:

Сортировка записей типизированного файла
Cоставьте программу на Паскале для сортировки записей типизированного файла.

Обработка типизированного файла из записей
1. Составить процедуру для формирования типизированного файла, компонентами которого являются записи вида: Type BOOK = record Name:...

Чтение и запись из типизированного файла
У меня такая проблема не записывается и не читается из типизированного файла. Uses Objects,App,Menus,Drivers,Views,MsgBox,Dialogs; ...

5
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
26.03.2018, 08:39
Лучший ответ Сообщение было отмечено Flapch как решение

Решение

Цитата Сообщение от Flapch Посмотреть сообщение
Сам же файл выглядит так
Это не типизированный файл, это обычный текстовый файл.

Добавлено через 4 минуты
Типизированный файл из него вы можете получить так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{ ... }
var
  i: Integer;
  t: Info;
  f: file of Info;
begin
  Assign(input,'info.txt'); Reset (input);
  Assign(f,'info.dat'); Rewrite(f);
  for i:=1 to 3 do with t do begin
    ReadLn(fio); ReadLn(number,amount,warn); ReadLn;
    Write(f,t);
  end;
  Close(f); Close(input);
end.
1
0 / 0 / 1
Регистрация: 25.03.2018
Сообщений: 16
26.03.2018, 08:47  [ТС]
bormant,
Дело в том, что задача такова:создать ручками файл, в котором и должна быть определенная структура. Подскажите, пожалуйста, а как без кода можно такое провернуть? Мне казалось, что будет считывание каждой строки отдельно, а тут такое. Хочется дополнительно узнать. Получается, что у меня просто отсутствует типизированный файл? Потому так криво? А само считывание в коде нормальное?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
26.03.2018, 10:32
Цитата Сообщение от Flapch Посмотреть сообщение
Дело в том, что задача такова:создать ручками файл, в котором и должна быть определенная структура.
Уточните задание у того, кто его вам выдал, можем поспорить, что вам показалось.
Например, чтобы поместить в файл вашу первую запись из примера, вам нужно записать от начала файла следующие двоичные данные (ниже даны в 16-ричном представлении, после ";" -- комментарий):
Code
1
2
3
4
07 41 53 44 61 61 73 64 ; 'ASDaasd'
01 00                   ; 1
19 00                   ; 25
02 00                   ; 2
Итого 14 байт.
Узнаёте свою запись? По-прежнему готовы готовить данные ручками? Тогда берите 16-ричный редактор и готовьте свой файл.

Добавлено через 8 минут
Цитата Сообщение от Flapch Посмотреть сообщение
само считывание в коде нормальное?
На троечку.
1
0 / 0 / 1
Регистрация: 25.03.2018
Сообщений: 16
26.03.2018, 20:05  [ТС]
bormant,
Хочется узнать, а почему Вы создаете файл info с расширением DAT? Это какое-то негласное правило?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
26.03.2018, 21:19
Лучший ответ Сообщение было отмечено Flapch как решение

Решение

От английского data -- данные.
Но может быть не самым удачным расширением имени, поскольку совпадает с некоторыми видеофайлами, кое-кто его тоже использует.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2018, 21:19
Помогаю со студенческими работами здесь

Сортировка типизированного файла записей без массивов
Помогите сделать сортировку типизированного файла записей без массивов. Надо сортировать из сортировочный файл на основе исходного файла по...

Заполнение и вывод на экран записей из типизированного файла
Нужно заполнить типизированный файл данными: порядковый номер, название товара и стоимость. Потом вывести на экран записи файла в прямом и...

Можно ли в цикле сортировки списка для типизированного файла сделать исключение дублирования записей
Не получается доработать цикл в программе repeat write('фамилия'); readln(zb.name); write('телефон'); readln(zb.phone); if...

Чтение двумерных массивов - записей из файла
Необходимо считать данные из файла. Данные в файле должны иметь следующую форму (ну сами символы и их количество в первых двух столбцах...

Удаление записей из типизированного файла
Из файла, в котором есть исходные данные, удалить записи, которые отвечают студентам 17ти лет, которые имеют аттестат с отличием 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru