Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Помогите, пожалуйста, новичку c Prolog 2.0!
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
evdok[mov evdok[mov вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2014
По умолчанию Помогите, пожалуйста, новичку c Prolog 2.0! - 09.11.2014, 14:44

Здравствуйте!
Программа сохраняет данные сотрудников в файл, но не может загрузить ранее сохраненные.
Visual Prolog Код:
domains D,N,N1,OKL,I =integer
        FIO,DR,DOL,DP,K,POL =symbol
database -svod1
          svod1(N,K,DR,DOL,OKL,DP,POL)
database -svod2
          svod2(N,FIO,K,DOL,OKL,DP,POL)
database -svod3
          svod3(N,FIO,DR,K,OKL,DP,POL)
database -svod
         svod(N,FIO,DR,DOL,OKL,DP,POL)
predicates
        start
        Patch
        load
  %      select(I)
  %      sel(I,I)
        process(I)
  %      procedure(I)
        sve(I)
        lod(I)
        repeat
goal
    start.

clauses
/*Процедура создания основного меню и загрузки базы данных*/
        start :-
            makewindow(1,23,7,"КАДРЫ",0,0,25,80),
            clearwindow,
            load,
            patch.
/*Процедура управления основным меню*/
        patch :-
            repeat,
            cursor(7,0),
            % write("                     0 - O programme...  "),nl,% О пpогpамме
            % write("                     1 - Korrekziia dannykh"),nl,% коррекция данных
            write("                     2 - Prosmotr bazy"),nl,% просмотр базы
            write("                     3 - Zagruzka bazy"),nl,% загрузка базы
            write("                     4 - Sokhranenie bazy"),nl,% сохранение базы
            % write("                     5 - Sozdanie novoi bazy"),nl,% создание новой базы
            write("                     6 - Vvod novykh dannykh"),nl,% ввод новых данных
            % write("                     7 - Prosmotr - dobavlenie"),nl,% просмотр-добавление
            % write("                     8 - Vykhod iz programmy"),nl,% выход из программы
            write("                     =>"),
            readint(Choice), % Ввод номера процесса
            Choice >= 0,
            Choice < 9,
            clearwindow,
            process(Choice),
            clearwindow,
            Choice = 8,
            retractall(_),
            removewindow.
/*Процедура поиска и загрузки файла содержащего базу данных*/
        load:-
            existfile("db.txt"),
            consult("db.txt",svod),%
            cursor(1,2),
            write("Basa sagruzhena").% База загружена
        load:-
            cursor(1,2),
            write("Net bazy na diske").%Нет базы на диске
/*Пpоцедуpа ввода новых данных*/
        process(6) :-
        makewindow(1,23,7,"Vvod novykh dannykh",0,0,25,80),% Ввод новых данных
            nl,
            write("Vvedite poriadkovyi nomer     :"),readint(K),nl,% Введите порядковый номер
            write("Vvedite Familiu I.O.          :"),readln(F),nl,% Введите Фамилию.И.О.
            write("Vvedite datu rozhdeniia        "),nl,% Введите дату рождения
            write("v formate dd.mm.gg            :"),readln(P),nl,% в формате дд.мм.гг
         write("Vvedite dolzhnost             :"),readln(V),nl,% Введите должность            
         write("Vvedite oklad                 :"),readint(G),nl,% Введите оклад
            write("Vvedite datu priema na rabotu  "),nl,% Введите дату приема на работу
            write("v formate dd.mm.gg            :"),readln(D),nl,% в формате дд.мм.гг
            write("Vvedite pol      :"),readln(T),nl,% Введите пол
            N1=K,FIO1=F,DR1=P,DOL1=V,OKL1=G,DP1=D,POL1=T,
            assertz(svod(N1,FIO1,DR1,DOL1,OKL1,DP1,POL1)),
            removewindow,
            fail.
/*Процедура просмотра содержимого базы данных*/
        process(2) :-
        makewindow(1,23,7,"Просмотp базы",0,0,25,80),
        nl,
write("---------------------------------------------------------------------------"),nl,
write("                               ОТДЕЛ КАДРОВ                                        "),nl,
write("---------------------------------------------------------------------------"),nl,
write("!Poriad.!     Familiia     !  Data    ! Dolzhnost!Oklad!Data priema!    POL  !"),nl,
write("!nomer  !       I.O.       !rozhdeniia!          !     ! na rabotu !         !"),nl,
write("---------------------------------------------------------------------------"),nl,
           
           svod(N,FIO,DR,DOL,OKL,DP,POL),
            cursor(Z,_),
            cursor(Z,0),write("!"),
            cursor(Z,1),write(N),
            cursor(Z,8),write(FIO),
            cursor(Z,26),write(DR),
            cursor(Z,35),write(DOL),
            cursor(Z,47),write(OKL),
            cursor(Z,53),write(DP),
            cursor(Z,65),write(POL),
            cursor(Z,74),write("!"),
            nl,
            fail.
        process(2) :-
write("---------------------------------------------------------------------------"),
nl,
write("Nazhmite liubuiu klavishu"),% Нажмите на любую клавишу
           readchar(_),
            removewindow.

/*Процедура загрузки в память базы данных*/
        process(3) :-
            nl,
            makewindow(2,15,4,"Загрузка",5,5,20,70),
            write("1 - Baza budet zagruzhena iz ukazannogo faila"),nl,% База будет загружена из указанного файла
            write("2 - Baza budet zagruzhena iz faila db.txt"),nl,% База будет загружена из файла db.txt
            write("3 - Vykhod v osnovnoe meniu"),nl,% Выход в основное меню
            write("==>"),
            readint(C), % Ввод номера пункта меню
            C>0,C<4,
            lod(C),
            !,
            removewindow.
/*Процедура сохранения базы данных*/
        process(4) :-
            nl,
            makewindow(2,15,4,"Запись",5,5,20,70),
            write("1 - Baza budet zagruzhena v ukazanni fail"),nl,% База будет записана в указанный файл
            write("2 - Baza budet zagruzhena v fail db.txt"),nl,% База будет записана в файл db.txt
            write("3 - Vykhod v osnovnoe meniu"),nl,% Выход в основное меню
            write("==>"),
            readint(I),% Ввод номера пункта главного меню
            I>0,I<4,
            sve(I),!,
            removewindow.
/*Процедура записи на диск*/
        sve(1) :-
            write(" Vvedite imia faila:"),% Введите имя файла
            readln(N),
           save("db.txt",svod),%
            write("Vse v poriadke"),% Все в порядке
            beep,
            !.

        sve(1) :-
            write("Oshibka obmena, nazhmite liubuiu klavishu"),% Ошибка обмена, нажмите любую клавишу
            readchar(_).

        sve(2) :-

                         save("db.txt").


        sve(3) .
/*Процедура чтения с диска*/
        lod(1) :-
            retractall(_),
            write(" Vvedite imia faila:"),% Введите имя файла
            readln(N),
            existfile("db.txt"),
            consult("db.txt"),
            write("Vse v poriadke"),% Все в порядке
            beep,
            !.

        lod(1) :-
            nl,
            write("Dannogo faila net na diske"),nl, % Данного файла нет на диске
            write("Nazhmite liubuiu klavishu"), % Нажмите любую клавишу
            readchar(_).

        lod(2) :-
            retractall(_),
            existfile("db.txt"),
            consult("db.txt"),
            write("Vse v poriadke"),% Все в порядке
            beep,
            !.

        lod(2) :-
            write("Faila db.txt net na diske"),nl,% Файла db.txt нет на диске
            write("Nazhmite liubuiu klavishu")% Нажмите любую клавишу
             ,
            readchar(_).

        lod(3).

        repeat.
        repeat :- repeat.

Последний раз редактировалось Винитарх; 09.11.2014 в 15:58 Причина: сделал теги
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,827
Сказал(а) спасибо: 2
Поблагодарили 284 раз(а) в 284 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 09.11.2014, 18:16

Вот этот клоз:
Visual Prolog Код:
lod(1) :-
            retractall(_),
            write(" Vvedite imia faila:"),% Введите имя файла
            readln(N),
            existfile("db.txt"),
            consult("db.txt"),
            write("Vse v poriadke"),% Все в порядке
            beep,
            !.
замените этим клозом:
Visual Prolog Код:
lod(1) :-
            retractall(_),
            write(" Vvedite imia faila:"),% Введите имя файла
            readln(N),
            existfile(N),
            consult(N),
            write("Vse v poriadke"),% Все в порядке
            beep,
            !.
Ответить с цитированием
  (#3 (permalink)) Старый
evdok[mov evdok[mov вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2014
По умолчанию 09.11.2014, 19:11

Заменил. Пишет, что файла "db.txt" нет на диске, хотя прог-а туда записывает новые строки.
Ответить с цитированием
  (#4 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,827
Сказал(а) спасибо: 2
Поблагодарили 284 раз(а) в 284 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 09.11.2014, 20:42

У Вас файлы БД должны лежать рядом с exe-шником. Проверьте.
Да, вот ещё нашёл ошибку - замените этот клоз:
Visual Prolog Код:
sve(1) :-
            write(" Vvedite imia faila:"),% Введите имя файла
            readln(N),
           save("db.txt",svod),%
            write("Vse v poriadke"),% Все в порядке
            beep,
            !.
вот этим клозом:
Visual Prolog Код:
sve(1) :-
            write(" Vvedite imia faila:"),% Введите имя файла
            readln(N),
           save(N,svod),%
            write("Vse v poriadke"),% Все в порядке
            beep,
            !.
Ответить с цитированием
  (#5 (permalink)) Старый
evdok[mov evdok[mov вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2014
По умолчанию 09.11.2014, 20:58

Замену сделал. Спасибо, но не работает. Файл БД лежит рядом с exe-шником. В противном случае прог-а не добавляла бы в нее новые записи. Пишет, что нет файла.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,827
Сказал(а) спасибо: 2
Поблагодарили 284 раз(а) в 284 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 09.11.2014, 22:05

а как Вы вводите имя файла?
надо, чтобы не было лишних пробелов и чтобы было указано расширение.
Ответить с цитированием
  (#7 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,227
Сказал(а) спасибо: 25
Поблагодарили 49 раз(а) в 49 сообщениях
Регистрация: 16.10.2005
По умолчанию 09.11.2014, 22:18

У Вас база именованная, а имя в одних предикатах прописано, в других нет. Нужно во всех вызовах consult, save, retractall прописать явно имя базы svod.

Исправления, которые сделал ув. Винитарх, касаются совсем другой ошибки - программа всегда сохраняет файл db.txt, игнорируя ввод имени файла. Аналогичные изменения нужно внести и в правило sve(1).
Ответить с цитированием
Пользователь сказал cпасибо:
evdok[mov (09.11.2014)
  (#8 (permalink)) Старый
evdok[mov evdok[mov вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2014
По умолчанию 09.11.2014, 22:33

Ввожу "db.txt"
Ответить с цитированием
  (#9 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,827
Сказал(а) спасибо: 2
Поблагодарили 284 раз(а) в 284 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 09.11.2014, 22:40

Цитата:
Сообщение от Alexiski Посмотреть сообщение
У Вас база именованная, а имя в одних предикатах прописано, в других нет.
Это не может являться причиной сообщения об отсутствии файла. Хотя и имена БД надо конечно указывать.

Цитата:
Сообщение от evdok[mov Посмотреть сообщение
Пишет, что нет файла.
А это сообщение пишет Ваша прога или операционка?

Цитата:
Сообщение от evdok[mov Посмотреть сообщение
Ввожу "db.txt"
Кавычки тоже вводите?
Их вводить не надо!!!
Ответить с цитированием
  (#10 (permalink)) Старый
evdok[mov evdok[mov вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.11.2014
По умолчанию 09.11.2014, 23:18

Спасибо, всё прекрасно работает.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста новичку с vba Fatali7t Любые вопросы от новичков 0 12.12.2013 19:50
Помогите пожалуйста с игрой на SWI Prolog help_ Prolog 6 05.11.2013 11:22
Помогите пожалуйста с задачей на SWI Prolog?! juk Задания за деньги 1 01.06.2013 22:28
ПОжалуйста, помогите решить задачки на Prolog Vera_ Prolog 0 13.12.2010 18:30
Помогите пожалуйста с задачей на Prolog! csram Prolog 5 29.04.2010 22:43
Помогите, пожалуйста! БД в Visual Prolog 7.2 ssck Prolog 16 23.12.2009 14:00
помогите новичку пожалуйста Chron4ik Pascal 2 28.09.2009 14:52
Помогите пожалуйста решить пару задачек на SWI-prolog. man Prolog 1 12.02.2008 17:43
помогите пожалуйста с 2мя задачами на Prolog'е. FOKZ Prolog 13 24.01.2008 23:03
Помогите новичку с GNU Prolog под Windows TBoris2006 Prolog 5 09.07.2007 18:37
Помогите пожалуйста исправить задачу по swi-prolog ler Prolog 2 17.02.2006 06:54



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов