Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление записи в файл. 
:(
    Опции темы
roalang
Дата 28.12.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



Доброе время суток.
Сталкнулась с такой вот проблемой, при выполнение команды добаление записи в файл выводиться ошибка: Too many open fales. Как ее исправить???
Код
 
  procedure Addrecord;
  var rez:integer; ch:char;
  begin
   while rez<>1 do
    begin
     writeln('Задайте имя файла, в котором будет создаваться запись');
      assign(f, 'c:\bp\bin\deti.dat'); 
      reset(f);
                 rez:=IOResult;
            if rez<>0 then
               begin
                 writeln('Проверьте правильность имени файла');
                 writeln('Будет ли повторное задание имени файла?(Д/Н)');
                 readln(ch);
                 if (ch='n') or (ch='N') then halt (0);
               end;
          end;
      seek(f,filesize(f));
    end;


PM MAIL   Вверх
Данкинг
Дата 28.12.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(roalang @  28.12.2008,  18:20 Найти цитируемый пост)
Too many open fales

Если всё же "files", то весьма похоже на соответствующую DOS'овскую ошибку когда в CONFIG.SYS параметр FILES= слишком маленький.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
ama_kid
Дата 28.12.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Цитата(roalang @  28.12.2008,  19:20 Найти цитируемый пост)
Too many open fales.
assign - есть, reset - есть, close - нет.... зато есть подозрение, что цикл - бесконечный (а точнее кончается приведенной ошибкой). ну и вообще непонятно, что приведенный кусок кода должен значить? Если добавление в конец файла новой записи - тогда почему бы не воспользоваться командой append?



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
volvo877
Дата 29.12.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(ama_kid @  28.12.2008,  17:56 Найти цитируемый пост)
Если добавление в конец файла новой записи - тогда почему бы не воспользоваться командой append?
Потому, что Append работает ТОЛЬКО с текстовыми файлами, с которыми НЕ работает Seek в свою очередь (откуда можно заключить, что у автора файл все-таки не текстовый, а типизированный).

Непонятно другое: Где именно по-твоему у тебя добавляется запись? Просто Seek ничего не даст, он просто передвинет указатель на самый конец файла... Ничего добавлено не будет...

Это сообщение отредактировал(а) volvo877 - 29.12.2008, 13:09
PM MAIL   Вверх
Dobermann
Дата 29.12.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



Цитата(roalang @  28.12.2008,  18:20 Найти цитируемый пост)
 при выполнение команды добаление записи в файл выводиться ошибка

Покажи, где в выложенном тобой коде происходит "добавление записи в файл"!!!
PM   Вверх
roalang
Дата 30.12.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



 reset(f); курсор встает на этой строке.
PM MAIL   Вверх
volvo877
Дата 30.12.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(roalang @  30.12.2008,  16:39 Найти цитируемый пост)
курсор встает на этой строке. 
Тебя не спрашивали, что где встает... Вопрос был, КАК ТЫ ДОБАВЛЯЕШЬ ЗАПИСЬ? Я этого у тебя в коде не вижу, поэтому и просил показать. Номер строки в предыдущем твоем посте назови, ГДЕ это ДОЛЖНО происходить...
PM MAIL   Вверх
roalang
Дата 31.12.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



Код

Program Detsad_1;
uses Crt,Dos;
  type detsad=record
           Sname_rebenka, Name_rebenka:string[15];
           pol:string[5];
           FIO_mama:string[30];
           FIO_papa:string[30];
           telephon:string[10];
           group:string[10];
           data_rogdenia:string[30];
           adres:string[20];
  end;
   var      f:file of detsad;
       zn, filename:string;
                 k:integer;
   kolnime:integer;
   ch:char;
  label metka;

  {-----------------------------------------------------------}
  procedure Creatfile;    {Создание файла}
    begin

  {writeln('Задайте имя файла, который будет создаваться');}
  { filename:='c:\bp\bin\';   }
      {readln(filename); }
       assign(f, 'c:\bp\bin\deti.dat');
       {$I-}
       writeln('Файл существует!!!');
       reset(f);
       {$I+}
       if IOResult<>0 then
       writeln('Файл не существует. Задайте имя файла!!!');
       rewrite(f);
       end;

  {-----------------------------------------------------------}
  procedure Addrecord;// Добавление в файл записи.
  var rez:integer; ch:char;
  begin
   while rez<>1 do
    begin
     writeln('Задайте имя файла, в котором будет создаваться запись');
      assign(f, 'c:\bp\bin\deti.dat');
      reset(f);
                 rez:=IOResult;
            if rez<>0 then
               begin
                 writeln('Проверьте правильность имени файла');
                 writeln('Будет ли повторное задание имени файла?(Д/Н)');
                 readln(ch);
                 if (ch='n') or (ch='N') then halt (0);
               end;
          end;
      seek(f,filesize(f));
    end;
   {==========================================================}
 procedure Inputfile;
    var  ch:char; st:detsad;
      begin
      repeat
         writeln('Введите данные о новом клиенте : ');
         write('Фамилия ребенка: ');                readln(st.Sname_rebenka);
         write('Имя ребенка: ');                    readln(st.Name_rebenka);
         write('Группа: ');                         readln(st.group);
         write('Пол: ');                            readln(st.pol);
         write('ФИО матери: ');                     readln(st.FIO_mama);
         write('ФИО отца: ');                       readln(st.FIO_papa);
         write('Телефон: ');                        readln(st.telephon);
         write('Дата рождение: ');                  readln(st.data_rogdenia);
         write('адрес: ');                          readln(st.adres);

         write(f,st);
         write('Надо ли вводить данные о новом клиенте? (Y/N)');
         readln(ch);
       {  writeln;    }

      until (ch='n') or (ch='N');
      writeln('Вышли из цикла, нажми Enter'); {readln;   }
     close(f); {end;}
   end;
    {=========================================================}
    procedure redzap;
var
                 st:detsad;
       filename,str:string;
       Sname_rebenka2,Name_rebenka2:string[15];
           group2:string[10];
           pol2:string[5];
           FIO_mama2:string[20];
           FIO_papa2:string[20];
           telephon2:string[10];
       data_rogdenia:string[30];
        adres:string[20];
           x:integer;
begin
    writeln('Задайте имя файла');
   { readln(filename);    }
    assign(f, 'c:\bp\bin\deti.dat');
    reset(f);
      with st do
       begin write('Введите фамилию клиента: ');readln(str);
       x:=0;
       while not eof(f) do
         begin
           read(f,st);
           if st.Sname_rebenka=str then
             begin
          writeln('Введите новые данные о клиенте: ');
          write('Фамилия ребенка: ');               readln(st.Sname_rebenka);
          write('Имя ребенка: ');                   readln(st.Name_rebenka);
          write('Группа: ');                        readln(st.group);
          write('Пол ребенка: ');                   readln(st.pol);
          write('ФИО мамы: ');                      readln(st.FIO_mama);
          write('ФИО папы: ');                      readln(st.FIO_papa);
          write('телефон: ');                       readln(st.telephon);

                Sname_rebenka2:=Sname_rebenka;
                Name_rebenka2:=Name_rebenka;
                group2:=group;
                pol2:=pol;
                FIO_mama2:=FIO_mama;
                FIO_papa2:=FIO_papa;
                telephon2:=telephon;
         seek(f,filepos(f)-1);
         write(f,st); x:=1;
       end; end;
       close(f);
    end;
   if x=0 then  begin writeln('Записи с такой фамилией нет');readln end;
end;
  {==============================================================}
   procedure Openfile;
     var rez:integer;ch:char;
     begin
       while rez<>0 do
         begin
            writeln('Задайте имя файла');
        {    readln(filename);}
            assign(f, 'c:\bp\bin\deti.dat');
            reset(f);
            rez:=IOResult;
           if rez<>1 then
               begin
                 writeln('Проверьте правильность имени файла!');
                 writeln('Будет ли повторное задание файла ? (Y/N)');
                 readln(ch);
                 if (ch='n') or (ch='N') then halt (0);
               end;
          end;
    end;
    {============================================================}
    procedure Outputfile;
      var st:detsad; k:char;
      i:integer;
       begin
        writeln('Хотите посмотреть данные о клиенте ? (Y/N)');
         readln(k);
          if (k='y') or (k='Y') then
            while not eof(f) do
              begin
                read(f,st); clrscr;
        writeln('*****************************************');
        writeln('Фамилия ребенка');
        writeln('Имя ребенка');
        writeln('Дата рождения');
        writeln('Пол');
        writeln('Группа');
        writeln('ФИО матери');
        writeln('ФИО отца');
        writeln('Телефон');
        writeln('Адрес');

         writeln(st.Sname_rebenka);
         writeln(st.Name_rebenka);
         writeln(st.data_rogdenia);
         writeln(st.pol);
         writeln(st.group);
         writeln(st.FIO_mama);
         writeln(st.FIO_papa);
         writeln(st.telephon);
         writeln(st.adres);

        writeln('Для продолжения нажмите (enter)');
          readln;
      {    if not eof(f) then
          begin
        {  writeln('Больше нет данных!');
           goto metka;
           end;}
           end;
           close(f);
          { end;}
       end;
       {========================================================}
       procedure Clearfile;
        var st:detsad;
            studtoout:string[20];
            fo:file of detsad;
       begin
 {      while ch<>#27 do begin     }
             writeln('Задайте имя файла, из которого удаляются элементы');
            { readln(filename);   }
             assign(f,{filename}'deti.dat');reset(f);
             assign(fo,'newfile.dat');rewrite(fo);
            writeln('Задайте фамилию клиента, запись о котором удаляется');
             readln(studtoout);
              while not eof(f) do
               begin
                read(f,st);
                if st.sname_rebenka<>studtoout then write(fo,st);
               end;
              close(f);close(fo);
              erase(f);
              rename(fo{,filename},'deti.dat');
       end;
    {   procedure TableOutput(fam, name:string; number: integer);
         begin
       end; }

       {ОСНОВНАЯ ЧАСТЬ ПРОГРАММЫ}
     Begin metka:clrscr;
    {  repeat}
      clrscr;
        writeln('МЕНЮ:':45);
        writeln('*************************':55);
        writeln('1:Создание файла':50);
        writeln('2:Добавление записи в файл':60);
        writeln('3:Корректировка записи':56);
        writeln('4:Просмотр файла':50);
        writeln('5:Удаление записи из файла':60);
        writeln('6:Выход из программы':54);
        readln(k);
         While ch<>#27 Do Begin
      {    Write('Press <Esc> to Exit':100); Х}

         case k of 1: begin Creatfile; Inputfile; goto metka; end;
                   2: begin Addrecord; Inputfile end;
                   3: redzap;
                   4: begin Openfile; Outputfile end;
                   5: Clearfile;
                   6: Halt ;
             else
             writeln('Ошибка. Повторите номер режима.');
             end;
             end;
     goto metka;
End.

PM MAIL   Вверх
Ofer
Дата 2.1.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



roalang, смотри внимательно:

Цитата(roalang @  31.12.2008,  08:29 Найти цитируемый пост)

   while rez<>1 do
    begin
     writeln('Задайте имя файла, в котором будет создаваться запись');
      assign(f, 'c:\bp\bin\deti.dat');
      reset(f);
                 rez:=IOResult;


Ты делаеш цыкл который будет повторятся пока rez не равна 1, а IORezult тебе возвращяет 0 всегда, когда операция инициации файла прошла успешно. А поскольку у тебя каждая инициация файла в этом цикле происходит успешно, то получается замкнутый цыкл и открывается больше 15 файлов(это по умолчанию для ДОС)

Это сообщение отредактировал(а) Ofer - 2.1.2009, 22:24
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1144 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.