IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Проблема с записью в файл
сообщение
Сообщение #1


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Нужно написать небольшую тему, типа вот этого : http://forum.pascal.net.ru/forum/index.php?showtopic=3845

C записью в массив все отлично! а вот с файлом проблемма, мы не изучали еще, вот даже на простом примере не получается, файл создается, но он пустой!, покажите на этом примере в чем ошибка :

Код
uses crt;
type
   person=record
   name : string;
          end;

var     p : person;
  file_p : file of person;

Begin
  clrscr;
  assign(file_p,'file_p.dat');
  rewrite(file_p);
  with p do
   begin
      writeln('name=');
      readln(p.name);
      close(file_p);
   end;
readln;
end.


Спасибо.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






klem4
Ты описал файл как
Код
file_p: file of person;
и даже не пытаешься в него ничего записать... Вот так:
Код
uses crt;
type person=
 record
   name : string;
 end;

var
 p : person;
 file_p : file of person;

Begin
 clrscr;
 assign(file_p,'file_p.dat');
 rewrite(file_p);
 
 writeln('name=');
 readln(p.name);
 write(file_p, p)

 close(file_p);
readln;
end.


P.S. А что, в ФАКе нет материалов по работе с файлами?
Я же выкладывал... Файлы

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Спасибо, Volvo.

Цитата
P.S. А что, в ФАКе нет материалов по работе с файлами?
Я же выкладывал... FAQ: Файлы



Не нашел я этого, плохо искал smile.gif
Щас почитаю.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


С записью разобрался, теперь проблемы со чтением sad.gif((

FAQ читал, просмотрел множество задач, но ничего не получается sad.gif

процедура output работает, но не верно, выдает какую-то ерунду,
Допустим ввожу
1) vasa
...

2) dima
...

3) peta
...

А выдает
1) vasa
2) vasa
3) dima
4) dima
5) peta

не могу понять как это все долно быть устроено :fire:

Заранее спасибо.

Код
program DataBase;
uses crt;
const n=30;
type
   STUD=record

          NAME1 : string; {Имя}
          NAME2 : string; {Фамилия}
          NAME3 : string; {Отчество}
          DOB   : string; {Дата рождения}
          HT    : string; {Домашний телефон}
          MT    : string; {Мобильный телефон}
          EMail : string; {E-mail адрес}
          ICQ   : string; {Номер ICQ}

        end;

var
      s : stud;
  i,all : byte;
  studs : array[1..n] of stud;
 EndRec : boolean;
 file_s : file of stud;

{-------------------------------------------------}

procedure search;
var nfind:byte;
   lastname:string;
   SearchPoint:boolean;
Begin
  clrscr;
  writeln('Введите Фамилию для поиска :');
  readln(lastname);
  SearchPoint:=false;
  i:=1;
  nfind:=0;
  while (i<=all)and(not(SearchPoint)) do
   begin
      s:=studs[i];
      with s do
       if name2=lastname then
       begin
           nfind:=i;
           SearchPoint:=True;
        end;
      inc(i);
   end;
   writeln('nfind=',nfind);
end;

{-------------------------------------------------}

procedure output;
Begin
  assign(file_s,'Data.dat');
  reset(file_s);
  i:=1;
  while (not(eof(file_s))) do
   begin
      read(file_s,s);
      with s do
       begin
          writeln(i,'-й студент :');
          write('ФИО : ');writeln(name2,' ',name1,' ',name3);
          write('Дата рождения :');writeln(dob);
          write('Домашний телефон :');writeln(ht);
          write('Мобилный телефон :');writeln(mt);
          write('ICQ : ');writeln(icq);
          write('E-mail :  ');writeln(email);
          writeln;
          inc(i);
       end;
   end;
end;

{-------------------------------------------------}

procedure if_next;
var ch:char;
Begin
  writeln('Будете вводить еще студента [Y/N] ?');
  repeat
   ch:=readkey;
  until (ch in ['Y','y','N','n']);
  clrscr;
  if ch in ['Y','y'] then
   begin
      write(file_s,s);
      inc(i);
      inc(all);
      EndRec:=true;
   end
    else
     begin
        close(file_s);
        exit;
     end;
end;

{--------------------------------------------------}

Begin
  clrscr;
  output;
  {assign(file_s,'Data.dat');
  rewrite(file_s);
  i:=1;
  all:=1;
  EndRec:=true;
  while (i<=n)and(EndRec) do
   with s do
    begin
       writeln('Введите информацию для ',i,'-го студента');
       write('Введите Имя : ');readln(name1);
       write('Введите Фамилию : ');readln(name2);
       write('Введите оочество :');readln(name3);
       writeln('Введите дату рождения');
       readln(DOB);
       writeln('Введите номер домашнего телефона');
       readln(HT);
       writeln('Введите номер мобильного телефона');
       readln(MT);
       writeln('Введите E-mail адрес');
       readln(EMail);
       writeln('Введите номер ICQ');
       readln(ICQ);
       studs[i]:=s;
       write(file_s,s);
       EndRec:=false;
       if_next;
    end;}
End.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






klem4
У меня глюки, или я прав? Смотри, что происходит... В основной программе:
Код
while (i<=n)and(EndRec) do
 with s do
   begin
     ...
     studs[i]:=s;
     write(file_s,s); { Я вот об этом }
     ...
   end;

Но в то же время:
Код
procedure if_next;
var ch:char;
Begin
 ...
 if ch in ['Y','y'] then
   begin
     write(file_s,s); { Еще раз ??? }
     ...
   end
 ...
end;

Значит откуда-нибудь вызов Write(file_s, s) надо убрать. :yes:

P.S. А почему
Код
repeat
 ch:=readkey;
until (ch in ['Y','y','N','n']);

а не так:
Код
repeat
 ch:=upcase(readkey);
until (ch in ['Y','N']);
;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
У меня глюки, или я прав? Смотри, что происходит... В основной программе:


Не может быть! она заработала!!! это я видимо когда эксперементировал, забыл, write в разных местах ставил и забыл убрать smile.gif[

Цитата
P.S. А почему

Код

repeat
ch:=readkey;
until (ch in ['Y','y','N','n']);


а не так:


Код

repeat
ch:=upcase(readkey);
until (ch in ['Y','N']);




Потомучто upcase(readkey) мне до этого момента было неизвестно smile.gif

Спасибо, Volvo. А я уж и не знал что и подумать.. а все из-за невнимательности...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 12.05.2024 8:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name