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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2012, 23:46   #1
rinoolik
Пользователь
 
Регистрация: 20.11.2012
Сообщений: 42
Восклицание работа с файлами

написать программу которая создает файл с расширением dat состоящий из чисел считывать записи из этого файла и записывать их в обратном порядке во второй файл.после этого удалить первый файл.
rinoolik вне форума Ответить с цитированием
Старый 12.12.2012, 01:41   #2
sauvage
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

ну наверное вам надо посмотреть:
var:
myfile : file of integer / real

далее работа с файлами:

assignfile
reset / rewrite
closefile

запись / чтение тоже не трудно:
read / write

ну и удаление файла командой erase
sauvage вне форума Ответить с цитированием
Старый 12.12.2012, 09:26   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

самый простой способ (если размер исходного файла это позволяет!) - прочитать все числа в память (массив или динамическую структуру), потом в цикле от последней записи к первой - записать в выходной файл.
Если же размер файла такой, что целиком он в память не поместится, тогда сложнее. Можно читать кусочками (по N штук, например), каждый раз позиционируя позицию в исходном файле так, чтобы прочитать ровно N штук, сначал до конца файла, потом до позиции предыдущего чтения и т.д. в этом случае надо обязательно учитывать, что количество записей в файле может быть не кратно N. А можно и абсолютно неоптимально поступить, перед КАЖДЫМ чтением позиционировать указатель на одну позицию ближе к началу файла.

и так.
способ 1.
Код:
const MaxRec = 300;
type Chislo = integer;
   {для простоты тип берём "целые числа", но, на самом деле не указано, 
      какого типа файл - какие числа даны... может и longint, может real, а может и double...}

var M : array[1..MaxRec] of Chislo; 
   A : Chislo;
   f, g : file of Chislo;
   i, N : integer;
   Name : string;
begin
   WriteLn('Укажите имя создаваемого файла с числами (без расширения .dat): ');
   Readln(Name);
   Name := Name + '.dat');
   Assign(f, Name);

   repeat
     Write('Укажите, сколько чисел будет в файле ',Name,' (от 1 до ',MaxRec,') :');
     Readln(N);
     if (N<1) or (N>MaxRec) writeLn('Ошибочное значение! Давайте ещё раз!');
   until (N>=1) and (N<=MaxRec);

   Randomize;
   {сначала создаём файл}
   Rewrite(f);
   for i:=1 to N do begin
      A := Random(MaxInt);
      Write(f, A);
   end;
   Close(f);

   {прочитаем файл в память (массив) и выведем его содержимое на экран}
   Reset(f);
   i:=0;
   while Not Eof(f) do begin
      Read(f, A);
      Write(A,' ');
      inc(i);
      M[i] :=  A; 
   end;
   N := i; {делаем вид, что мы не знаем, сколько записей в файле, поэтому запоминаем их количество в N}
   WriteLn;
   Close(f);

   {создадим второй файл g} 
   Assign(g, 'OthFile.dat' );
   Rewrite(g);
   
   {запишем в него числа в обратном порядке }
   for i := N downto 1 do
      Write(g, M[i]);
   Close(g);
   
   WriteLn('Успешно записан файл g');

   {выведем его содержимое на экран} 
   WriteLn('Содержимое файла OthFile.dat:');
   Reset(g);
   while Not Eof(g) do begin
      Read(g, A);
      Write(A,' ');
   end;
   Close(g);

   WriteLn('Конец.');
   Readln

end.

если интересно, то второй способ создания файла (без массива) выглядит так:
Код:
   Reset(f);
   Rewrite(g);
   N := FileSize(f);
   while N>0 do begin
       Seek(f, N-1);
       Read(f, A);
       Write(g, A);
       Dec(N);
   end;
   Close(f);
   Close(g);

Последний раз редактировалось Serge_Bliznykov; 12.12.2012 в 10:03. Причина: забыл закрыть файл g после записи в него. добавил в код Close(g);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2012, 09:53   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
assignfile
closefile
Для паскаля - assign и close
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами на С++. Solnze2 Помощь студентам 3 20.05.2011 22:08
работа с файлами Alexander1205 Общие вопросы C/C++ 1 20.05.2011 17:51
работа с файлами(C++) link13 Помощь студентам 0 19.05.2011 22:01
Работа с файлами... Natashka Milashka Visual C++ 0 14.05.2011 00:59
C++: работа с файлами MR_Andrew Общие вопросы C/C++ 3 09.04.2010 20:32