Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файлы последоват. доступа, Подкорректируйте программу!Please 
:(
    Опции темы
SapFira
  Дата 13.4.2007, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



Вот программа,кот.формирует файл из имени актера и фильма,а потом выполняет поиск фильма по имени актера. Помогите доделать ее так,чтобы когда найдет эти данные, удалила их и затем вывела на экран содержимое файла. smile 
uses crt;
type
  TActor = record
  fio: string[20];
  film: string[30];
end;

type
  TActorsFile = file of TActor;

var
  af: TActorsFile;
  filename: string;
  i,j: integer;
  actor: TActor;
  film: string;
  f: file;
begin
  clrscr;
  write('ВВод the filename: ');
  readln(filename);
  writeln('Now, enter the names of actors and their films,');
  writeln('to stop entering enter nothing in the actor name');
  assign(af, filename);
  rewrite(af);
  repeat
    write('Ввод актера: ');
    readln(actor.fio);
    if actor.fio <> '' then
    begin
      write('Ввод фильма: ');
      readln(actor.film);
      write(af, actor);
    end;
  until Actor.fio = '';
  close(af);
  writeln;
  write(Ввод фильма для поиска актера: ');
  readln(film);
  assign(af, filename);
  reset(af);
  while not eof(af) do
  begin
    read(af, actor);
    if actor.Film = film then
    begin
      writeln('Film: ', actor.film);
      writeln('Actor: ', actor.fio);
    end;
  end;
  close(af);
  writeln('Press any key to continue...');
  readkey;
end.
PM MAIL   Вверх
ama_kid
Дата 13.4.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Вот примерный код, который поможет тебе удалить заданную позицию из твоего файла:
Код
procedure DeletePos(FileName:string; Pos:integer);
var
 fa,fb: TActorsFile;
 tmp:TActor;
begin
 assign(fa,FileName);
 reset(fa);
 assign(fb,FileName);
 reset(fb);

 seek(fa,Pos);
 seek(fb,Pos);
 read(fa,tmp);
 while not eof(fa) do
  begin
   read(fa,tmp);
   write(fb,tmp);
  end;
 close(fa);
 truncate(fb);
 close(fb);
end;
Прикручивай  smile 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
SapFira
Дата 13.4.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



а после чего ее вставить надо? и как написать: DeletePos( ???? ), что должно быть в скобках?
PM MAIL   Вверх
ama_kid
Дата 13.4.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Когда находишь необходимую запись - запоминаешь позицию в файле (CurPos:=FilePos(file);) закрывай его и вызывай DeletePos('C:\actors.txt', CurPos);
После этого можешь спокойно выводить файл на экран


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Fighter
Дата 13.4.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Цитата(ama_kid @  13.4.2007,  16:49 Найти цитируемый пост)
Когда находишь необходимую запись - запоминаешь позицию в файле (CurPos:=FilePos(file);) закрывай его и вызывай DeletePos('C:\actors.txt', CurPos);
После этого можешь спокойно выводить файл на экран



А что если в файле несколько актеров с одним именем, тогда что уж, одного удалять. Наверное тогда нужно удалять всех. А тут получается что удаляется только первый. 
PM MAIL   Вверх
SapFira
Дата 14.4.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



А еще проблема, как выводить на экран содержимое файла?? smile 
PM MAIL   Вверх
Fighter
Дата 14.4.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Цитата(SapFira @  14.4.2007,  18:51 Найти цитируемый пост)
А еще проблема, как выводить на экран содержимое файла?? smile


Ну так, в первом примере есть вывод на экран. 

Код

...
while not eof(af) do
  begin
    read(af, actor);
    if actor.Film = film then
    begin
      writeln('Film: ', actor.film);
      writeln('Actor: ', actor.fio);
    end;
  end;
...


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

Код

while not eof(af) do
begin
  read(af, actor);
  writeln('Film: ', actor.film);
  writeln('Actor: ', actor.fio);
end;


PM MAIL   Вверх
SapFira
Дата 26.4.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 9.4.2007

Репутация: нет
Всего: нет



Все равно не получается с удалением того что найдется..Не могли бы вы подсказать как и куда вставлять эту процедуру(DeletePos) smile прям в моей программе именно
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.