Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2009, 17:39   #1
Razorishe
Пользователь
 
Аватар для Razorishe
 
Регистрация: 16.03.2009
Сообщений: 34
По умолчанию Паскаль. Типизированные файлы.

Доброе время суток уважаемые посетители форума. Такая задачка:
Создать файл, содержащий сведения об успеваемости. Каждая запись файла должна содержать ФИО, предмет, оценку. Предусмотреть следующие режимы работы: добавление записи в файл....
В общем менюшку с режимами работы создал, добавление записи получилось, но не правильно. Когда я выбираю пунк добавить у меня перезаписывается строчка, которую я добавлял до этой. Подскажите как реализовать это? Нужно же использовать record? Если интересует мой код могу его выложить.
Добавляйте отзывы, буду благодарен
Razorishe вне форума Ответить с цитированием
Старый 29.03.2009, 17:47   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Когда я выбираю пунк добавить у меня перезаписывается строчка, которую я добавлял до этой
А вы, случаем, не переоткрываете файл при каждом добавлении?
В любом случае, файл нужно открывать в режиме добавления (Append)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 18:25   #3
Razorishe
Пользователь
 
Аватар для Razorishe
 
Регистрация: 16.03.2009
Сообщений: 34
По умолчанию

Ругается на тип файла - append(f); (f:file of string. Я так понял нельзя использовать эту процедуру для типизированных файлов.
Добавляйте отзывы, буду благодарен
Razorishe вне форума Ответить с цитированием
Старый 29.03.2009, 18:39   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да, только для текстовых.
Для остальных смещайте курсор в конец с помощью Seek:
Код:
Procedure Seek (var F; N: LongInt)
Чтобы узнать размер файла - Filesize(<файловая переменная>)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 19:33   #5
Razorishe
Пользователь
 
Аватар для Razorishe
 
Регистрация: 16.03.2009
Сообщений: 34
По умолчанию

Не получается сделать...
Код:
 menu; {процедура вызывает меню}
 1: begin 
 assign(f,'a.txt');
 reset(f);
 if y=1 then {если выбран первый режим работы}
  begin
   {with uspev do     {когда делал с record}
    {begin   }
     write('Vvedite FIO: ');
     readln(fio);
     write('Vvedite predmet: ');
     readln(predmet);
     write('Vvedite ocenku: ');
     readln(ocenka);
     str(ocenka,ocenkast); 
     write(f,fio,predmet,ocenkast);
     close(f);
     clrscr;
     menu;
    {end; }
  end;
  end;  
 goto 1;
Что тут добавить нужно или что не так. Сначало делал с типом record потом убрал его. C goto намудрил немножко, но это не важно сейчас я думаю.
Добавляйте отзывы, буду благодарен
Razorishe вне форума Ответить с цитированием
Старый 29.03.2009, 19:49   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Что тут добавить нужно или что не так
А что вы хотите сделать?
Чтобы переместить указатель в конец файла, напишите:
Код:
seek(f,filesize(f));
А от goto советовал бы вам как можно скорее избавиться )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 20:01   #7
Razorishe
Пользователь
 
Аватар для Razorishe
 
Регистрация: 16.03.2009
Сообщений: 34
По умолчанию

фуф разобрался, а гоуту это я так тренировался.) А то что в текстовый файл добавляет переменные и между ними большое количество пробелов это нормально?
Добавляйте отзывы, буду благодарен
Razorishe вне форума Ответить с цитированием
Старый 29.03.2009, 20:08   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 20:11   #9
Razorishe
Пользователь
 
Аватар для Razorishe
 
Регистрация: 16.03.2009
Сообщений: 34
По умолчанию

Дело в том, что я не задавал размер строки, ну да ладно спасибо вам за помощь. Буду делать остальные режимы работы..
Добавляйте отзывы, буду благодарен
Razorishe вне форума Ответить с цитированием
Старый 30.03.2009, 11:16   #10
Razorishe
Пользователь
 
Аватар для Razorishe
 
Регистрация: 16.03.2009
Сообщений: 34
По умолчанию

Опять нужна помощь. Сейчас мне нужно удалить строку из файла. Вот до чего я додумал
Код:
if y=3 then {если выбран третий режим работы}
 begin
  writeln('Spisok uchashihsya:');  {сначало выводим список учащихся}
  reset(f);
  with uspev do
   begin
    repeat
     read(f,fam,io,predmet,ocenkast);
     writeln(fam,' ',io,'    ',predmet,'    ',ocenkast);         
    until eof(f);
    write('Vvedite familiu: ');   {вводим фамилию из списка}
    readln(fam2);
    reset(f);
    repeat
     read(f,fam,io,predmet,ocenkast);
      if fam=fam2 then   {сравниваем введенную фамилию с фамилиями из списка}
    ....      {если есть совпадение нужно как то удалить это строку}
    until eof(f);
   end;
  readln;
  clrscr;
 end;
Я не знаю как можно удалить строку. Буду благодарен за помощь.
Еще можно реализовать через временный файл, т. е. как я понял данный файл(a.txt) переписывается в b.txt, но уже без данной строчки, после чего файл a.txt удаляется, а b.txt переименовывается в a.txt.
Добавляйте отзывы, буду благодарен
Razorishe вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типизированные файлы Xeon332 Помощь студентам 8 27.02.2009 20:15
типизированные файлы MyQwErTy Паскаль, Turbo Pascal, PascalABC.NET 7 11.11.2008 20:54
Типизированные файлы.Паскаль.help! ромка) Паскаль, Turbo Pascal, PascalABC.NET 1 17.05.2008 07:59
Типизированные файлы.Создание, удаление, редактирование, сортировка записей типизированного файла.Паскаль Студент Шиза Помощь студентам 6 08.12.2007 13:41