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

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

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

> Проблема с записью в файл
klem4
сообщение 26.01.2005 15:59
Сообщение #1


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

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

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


Нужно написать небольшую тему, типа вот этого : http://forum.pascalnet.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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
volvo
сообщение 26.01.2005 16:13
Сообщение #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 - 11.11.2010 14:24
 К началу страницы 
+ Ответить 
klem4
сообщение 26.01.2005 16:31
Сообщение #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 
 К началу страницы 
+ Ответить 
klem4
сообщение 28.01.2005 19:47
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.01.2005 20:21
Сообщение #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']);
;)
 К началу страницы 
+ Ответить 
klem4
сообщение 28.01.2005 20:30
Сообщение #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

 



- Текстовая версия 20.07.2025 5:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"