Помощь - Поиск - Пользователи - Календарь
Полная версия: файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
maklir
как переписать информацию и неформатног record файла, в форматный text файл?
мисс_граффити
можешь привести здесь, как у тебя описаны эти файлы?
maklir
 program svet;
      type tovar=record
      shapka:string[50] ;
      tip:string[10];
      name:string[10];
      art:string[10];
      coast:string[10];
      proizv:string[10];
      end;
{_____________________________________________________}
var
   work_file : file of tovar;
         rec : tovar;
   file_name : string;
         key : integer;
        exit : boolean;
           x : string;
           shapka:string;
           srst:real;
 {----------------------------------------------------------------------------}
      procedure add_record;
      begin
      writeln('Record N ',filepos(work_file)+1);
      with rec do
          begin
              shapka:= 'і tip tovara і naimenovanie і articul і stoimost і O/P і';

              readln(shapka) ;
               write('type tovara  ');
               readln(tip);
               write('tovar   ');
               readln(name);
               write('articul  ');
               readln(art);
               write('stoimost  ');
               readln(coast);
               write('obem proizvodstva  ');
               readln(proizv);
               write(work_file,rec);
          end;
          end;
{_________________________________________________________}
      procedure create_new_file;
      var
   i,n:integer;
      begin
     write('enter file name');
     readln(file_name);
     assign(work_file,file_name);
     rewrite(work_file);
     writeln('Create records of file ',file_name);
     write('Enter count records: ');
     readln(n);
     for i:=1 to n do add_record;
     writeln('FILE CREATED');
     writeln('File of data have ',filesize(work_file),' records');
     close(work_file);
   end;
   {-----------------------------------------------------------------}
   procedure add_records_in_the_end;
begin
         write('enter file name');
     readln(file_name);
     assign(work_file,file_name);

     {$I-}
     reset(work_file);
     {$I+}
     if IOresult = 0 then
        begin
             seek(work_file,filesize(work_file));
             add_record;
             writeln('Data is wrote. So ',filesize(work_file),' records');
             close(work_file);
        end
     else
         writeln('File with name '+file_name+' is not');
end;
{-----------------------------------------------------------------------}

  {______________________________________________________________________}
   procedure output_record;
begin
     read(work_file,rec);
     with rec do
          begin
               write('N ',filepos(work_file),' : ');
               writeln('tip: ',tip);
               writeln('naimenovanie: ',name);
               writeln('articul ',art);
               writeln('cena: ',coast);
               writeln('o/p: ',proizv)
          end;
end;
{----------------------------------------------------------}
   procedure output_all_records;
   begin
     write('enter file name');
     readln(file_name);
     assign(work_file,file_name);
     assign(work_file,file_name);
     {$I-}
     reset(work_file);
     {$I+}
     if IOresult = 0 then
        begin
             seek(work_file,0);
             writeln('OUTPUT INFORMATION ABOUT BOOK ','"',file_name,'"');
             while (not eof(work_file)) do output_record;
        end
     else
         writeln('File '+file_name+' is not');
end;
{--------------------------------------------------------------------}
procedure update_records;
var
   number_of_record:integer;
begin
      write('enter file name');
     readln(file_name);
     assign(work_file,file_name);
     {$I-}
     reset(work_file);
     {$I+}
     if IOresult = 0 then
        begin
             writeln('Enter number of rewrite record :');
             readln(number_of_record);
             seek(work_file,number_of_record-1);
             writeln('Zna4enie of this record: ');
             output_record;
             seek(work_file,number_of_record-1);
             writeln('Enter new zna4enie ',number_of_record,' record');
             add_record;
             close(work_file);
        end
     else
         writeln('nepvernoe' +file_name);
end;

 {-------------------------------------------------------------------------}
  begin
     exit:=false;
          repeat
          writeln('                                      MENU');
           writeln('1 - Sozdat" noviy fail');
           writeln('2 - prosmotr informacii o tovare');
           writeln('3 - Obnovit" zapis');
           writeln('4 - dobavit" zapis');
           writeln('5 -SOSTAVIT SPISOK');
           writeln('6 - EXIT');
           write('Your choose: ');
           readln(key);
           case key of
                1:create_new_file;
                2:output_all_records;
                3: update_records;
                4:add_records_in_the_end;
                6:exit:=true;
           end;
           writeln('Executed. <ENTER>');
           readln;
           until exit;
           readln;
end.
end.




соответственно после(или в ней?)подрограммы ввода нужно записать этот файл text
andriano
1. Открыть бесформатный файл на ввод.
2. Открыть текстовый файл на запись.
3. Считать запись из бесформатного файла.
4. Записать в текстовый файл.
5. Если нет конца файла - на 3.
6. Закрыть оба файла.
мисс_граффити
andriano, чудные советы.
мне понравилось.
особенно п.3 и 4.
с учетом того, что файл, из которого пишем, судя по всему, типизированный (work_file : file of tovar;)....
можешь показать _компилирующуюся_ реализацию того, как ты это себе представляешь?
andriano
На компилируемость не проверял, но примерно так:

repeat
  blockread(FileIn,MyRecord,sizeof(MyRecord));
  writeln(FileOut,MyRecord.Item1,' ',MyTrcord.Item2,' ',MyRecord.Item3);
until eof(FileIn);


Это для тиа файла file, если файл типа file of MyRecord, то:
  read(FileIn,MyRecord);

А что, что-то не так?


PS. Фрагменты эквивалентны в том смысле, что с одним и тем же файлом может работать с равным успехом ЛЮБОЙ из них. Т.е. в данном случае файл, созданных типизированным, можно открыть и читать как нетипизированный и наоборот.
мисс_граффити
из описанного тобой п.4 можно было понять, что речь идет о записи по полям, а не целиком?
maklir
именно по полям, мне это и надо
maklir
ничего не получается...
мисс_граффити
почему?
показывай, что написал....
andriano
Цитата(мисс_граффити @ 4.01.2008 0:25) *

из описанного тобой п.4 можно было понять, что речь идет о записи по полям, а не целиком?
"Записать" и означает "записать" - любым доступным для данного ЯВУ и выбранного компилятора способом. Если компилятор не позволяет определить процедуру форматного преобразования для пользовательсткого типа, то только по полям. Если позволяет - можно и запись целиком.
Так что если не ставить знак равенства между "Задачи" и "Borland Pascal 7.0" (что, кстати, совсем не следует из условия), то вполне можно написать:
uses DOS;

procedure GetCurrentDate(var date: DateTime);
var
  Year, Month, Day, DayOfWeek: Word;
begin
  GetDate(Year, Month, Day, DayOfWeek);
  date.Year := Year;
  date.Month := Month;
  date.Day := Day;
end;

procedure __writer (var f: text; const value: DateTime; w: Integer);
const NameMonth : array[1..12]of string[3] = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
begin
  with value do Write(f, Day, '-', NameMonth[Month], '-', Year);
end;

var
  date: DateTime;
begin
  GetCurrentDate(date);
  Writeln('Current Date: ',date);
end.

Вывод:
Цитата
Current Date: 5-Jan-2008
мисс_граффити
Цитата
"Записать" и означает "записать" - любым доступным для данного ЯВУ и выбранного компилятора способом.

Особенно когда человек спрашивает, КАК это сделать.
Примерно то же:
-Как написать сортировку слиянием?
-Заполняешь массив. Сортируешь его (слиянием). Выводишь полученный массив на экран или в файл.
andriano
Цитата(мисс_граффити @ 5.01.2008 14:11) *

Особенно когда человек спрашивает, КАК это сделать.
Примерно то же:
-Как написать сортировку слиянием?
-Заполняешь массив. Сортируешь его (слиянием). Выводишь полученный массив на экран или в файл.

Нет, человек спрашивал как переписать из одного файла в другой. Я дал алгоритм в 6 шагов. Можно, конечно, детализировать, но для этого нужно минимум получить ряд уточнений, которыми мы пока не располагаем.

Кстати, создается впечатление, что приведенная программа написана совсем не автором темы. А автору нужно только чтобы кто-то внес в чужую программу нужные ему исправления.

Хотелось бы получить от автора темы:
1. Вразумительное описание того, что ему нужно.
2. Его собственные попытки сделать это.
3. Описание проблемы: чем то, что написано, не устраивает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.