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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 03:01   #1
Alena_897
Пользователь
 
Регистрация: 06.05.2010
Сообщений: 32
По умолчанию работа с типизированным файлом

есть такая программа:
Код:
program primer;
uses crt;
 type avto=record
    obem:real;
    marka,cvet,typ: string; 
    god,probeg: integer;
 end;
 var
    spisok: file  of avto; {fail dlya zapisi avto}
    mash:avto;
    fname:string[12];
    procedure vvoddan(num:integer);
 begin
 { }
      with mash do
 begin
    {posledovatelno vvodim kazhduyu zapis}
       writeln ('vvedite svedeniya o ', num , '-om avtomobile:  ');
       writeln ('vvedite marku avto:'); 
       readln (marka);
       writeln ('vvedite cvet kuzova:');
       readln (cvet);
       writeln ('vvedite god vypuska avto:');
       readln(god);
       writeln ('vvedite typ kuzova:');
       readln(typ);
       writeln ('vvedite obem dvigatelya:');
        readln (obem);
	writeln ('vvedite probeg:');
       readln (probeg);
       write(spisok,mash);
    end;
    end;
 procedure filevvod;
 var
    n,count:integer;
 begin
      write('vvedite imya faila dannyh:  ');
      readln(fname);
      assign(spisok,fname);
      rewrite(spisok);
      write('vvedite kolichestvo avtomobilei:  ');
      readln(count);
      for n:=1 to count do
          vvoddan(n);
          close(spisok);
          readln;
 end;
 begin
 clrscr;
 filevvod;
 readln;
 end.

    end.
все вводится, все записывается... но вот только в файл цифры не записываются, только символы. среда turbo pascal. сохраняю в файл с расширение *.pas. подскажите, в чем проблемы?
Alena_897 вне форума Ответить с цитированием
Старый 04.01.2012, 03:38   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Если можно то конкретней!
А так, то так как у вас файл типизированный в него не пишутся цифры или символы, в него записываются байты информации! Поэтому при открытии такого файла каким нибудь notepad вы и видите символы, тк он автоматически переводит всё в символьный вид! Как-то так.
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 04.01.2012, 20:33   #3
Alena_897
Пользователь
 
Регистрация: 06.05.2010
Сообщений: 32
По умолчанию

ну вот ввожу слова и цифры в консольке. все это сохраняется. открываю в блокноте. слова есть а вместо цифр квадратики
Alena_897 вне форума Ответить с цитированием
Старый 04.01.2012, 20:54   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Так и должно быть.
Если файл текстовый, то при записи в него данных происходит преобразование чисел в их символьное представление, ну а символы передаются как есть.
Если файл типизированный, то данные пишутся в том виде, в котором они хранятся в памяти, без преобразования.
А там символы хранятся как символы, каждый байт строки - это код символа, а числа - как двоичное число.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 05.01.2012, 02:05   #5
Alena_897
Пользователь
 
Регистрация: 06.05.2010
Сообщений: 32
По умолчанию

аааа.
Код:
program primer;
uses crt;
    
var
kod:integer;


 type avto=record
    obem:real;
    marka,cvet,typ: string; 
    god,probeg: integer;
 end;
 var
    spisok: file  of avto; {fail dlya zapisi avto}
    mash:avto;
    fname:string[12];
 
 procedure filevvod;
 begin
      write('vvedite imya faila dannyh:  ');
      readln(fname);
      assign(spisok,fname);
      rewrite(spisok);
      close(spisok);

end;
 procedure oldfile;
 begin
      write('vvedite imya suschestvuyuschego faila:');
      readln(fname);
      assign(spisok,fname);
      reset(spisok);
      close(spisok);
 end;

    procedure vvoddan;
      var n,count:integer;
 begin

      with mash do
 begin
    {posledovatelno vvodim kazhduyu zapis}
       write('vvedite kolichestvo avtomobilei:  ');
       readln(count);
        for n:=1 to count do
        writeln ('vvedite svedeniya o ', n , '-om avtomobile:  ');
       writeln ('vvedite marku avto:');
       readln (marka);
       writeln ('vvedite cvet kuzova:');
       readln (cvet);
       writeln ('vvedite god vypuska avto:');
       readln(god);
       writeln ('vvedite typ kuzova:');
       readln(typ);
       writeln ('vvedite obem dvigatelya:');
        readln (obem);
	writeln ('vvedite probeg:');
       readln (probeg);
       write(spisok,mash);
    end;
    end;
    
     begin
        while kod<>0 do 
         readln;
         writeln('1 - sozdanie novoi BD');
         writeln('2 - vvod svedeniy ob avtomobilyah');
         writeln('3 - vvod novoi zapisi');
         writeln('4 - izmenenie opredelennoi zapisi');
         writeln('5 - ydalenie opredelennoi zapisi');
         writeln('6 - poisk zapisei');
         writeln('7 - sortirovka');
         writeln('8 - prosmotr BD');
         writeln('9 - exit');
         readln(kod);
        
     case  kod  of
         
         1: filevvod;
         2: vvoddan;

         9: exit;
        else writeln('nepravilinyy vvod!!!');
    
 end;
 begin
 clrscr;
{ filevvod;}
 readln;

     end;
    end.
вот это данный этам моей горе-проги. вот тот цикл выделенный я сделала (while kod<>0 do), чтобы после выбора опредеоленного пункта , все меню оставалось в консоли, а не сразу чтобы окно закрывалось. так вот вопрос. почему нифига не получается? может я не так его как-то записала?
Alena_897 вне форума Ответить с цитированием
Старый 05.01.2012, 11:36   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) что Вы этим самым while kod<>0 do пытаетесь добиться?!

2) абсолютно не понял, зачем это Вам, но, раз уж хотите зациклить - так задайте вначале значение kod не равное нулю.


мне кажется, что Вы пытаетесь соорудить что-то наподобии такого:
Код:
program primer;
uses crt;

var
  kod: integer;


type avto = record
    obem: real;
    marka, cvet, typ: string;
    god, probeg: integer;
  end;

var
  spisok: file of avto; {fail dlya zapisi avto}
  mash: avto;
  fname: string[12];

procedure filevvod;
begin
  write('vvedite imya faila dannyh:  ');
  readln(fname);
{$I-}
  assign(spisok, fname);
  rewrite(spisok);
{$I+}
end;

procedure oldfile;
begin
  write('vvedite imya suschestvuyuschego faila:');
  readln(fname);
{$I-}
  assign(spisok, fname);
  reset(spisok);
{$I+}
end;

procedure VvodOne;
begin
  with mash do begin
    writeln('vvedite marku avto:');
    readln(marka);
    writeln('vvedite cvet kuzova:');
    readln(cvet);
    writeln('vvedite god vypuska avto:');
    readln(god);
    writeln('vvedite typ kuzova:');
    readln(typ);
    writeln('vvedite obem dvigatelya:');
    readln(obem);
    writeln('vvedite probeg:');
    readln(probeg);
    write(spisok, mash);
  end;
end;

procedure DobavitZapis;
begin
{$I-}
  seek(spisok, FileSize(spisok));
{$I+}
  if IOResult <> 0 then begin
    WriteLn;
    WriteLn('Oshibka vvoda/vyvoda: fail BD doljen byt` otkryt.');
    WriteLn;
    WriteLn('Dly prodoljenia raboty s programmoi najmite ENTER');
    Readln;
    Exit;
  end;

  vvodOne;
  WriteLn('Dly prodoljenia raboty s programmoi najmite ENTER');
  Readln;
end;


procedure vvoddan(pKod: integer);
var n, count: integer;
begin

  if pKod = 1 then filevvod
  else oldfile;

  if IOResult <> 0 then begin
    WriteLn;
    WriteLn('Oshibka vvoda/vyvoda: libo nedopustiomoe imay, libo faila net.');
    WriteLn;
    WriteLn('Dly prodoljenia raboty s programmoi najmite ENTER');
    Readln;
    Exit;
  end;

    {posledovatelno vvodim kazhduyu zapis}
  write('vvedite kolichestvo avtomobilei:  ');
  readln(count);
  for n := 1 to count do begin
    writeln('vvedite svedeniya o ', n, '-om avtomobile:  ');
    VvodOne
  end;

  WriteLn;
  WriteLn('Dly prodoljenia raboty s programmoi najmite ENTER');
  Readln;

end;

begin
  repeat
    clrscr;
    writeln('1 - sozdanie novoi BD i vvdo svedeniy ob avtomobilyah');
    writeln('2 - dobavlenie svedeniy ob avtomobilyah v suschestvuyuschuiy BD');
    writeln('3 - vvod novoi zapisi v tekushuiy BD');
    writeln('4 - izmenenie opredelennoi zapisi');
    writeln('5 - ydalenie opredelennoi zapisi');
    writeln('6 - poisk zapisei');
    writeln('7 - sortirovka');
    writeln('8 - prosmotr BD');
    writeln('9 - exit');

    readln(kod);

    case kod of

      1, 2: vvoddan(Kod);
      3: DobavitZapis;
      9: begin {ничего не делаем - выход из цикла} end;

    else writeln('nepravilinyy vvod!!!');
    end;
  until kod = 9;

  WriteLn('Dly zavershenia raboty s programmoi najmite ENTER');
  readln;

end.

Последний раз редактировалось Serge_Bliznykov; 05.01.2012 в 12:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.01.2012, 13:34   #7
Alena_897
Пользователь
 
Регистрация: 06.05.2010
Сообщений: 32
По умолчанию

огромное спасибо! очень помог.
я понимаю, что это уже сверхнаглость, но мне очень нужно, чтобы сначала информация выводилась на экран (процедуры vvoddan и vvodOne), а потом вопрос: сохранить ли в файл(1-да, 2-нет). че-т вообще не получается(((
Alena_897 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с типизированным файлом Julila Помощь студентам 1 25.02.2011 23:23
Проблема с запросом в задаче с типизированным файлом GorNikSar Помощь студентам 1 29.06.2009 21:16
Работа с типизированным файлом на Паскале qwertytol Помощь студентам 0 15.06.2009 18:07
Сохранение и открытие Image (размер и положение) с типизированным файлом Лукманов Александр Общие вопросы Delphi 4 31.03.2009 13:55