Как экспортировать данные из базы данных MySQL в файл .flr или .pl в определенном формате - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь извлечь данные из базы данных MySQL в файл в формате, который может прочесть Пролог, который похож на формат JSON, но я не понял, как выполнить перенос строки, а также при автоматической загрузке в базу данных MySQL.сохраняет в файл.

Этот код извлекается из базы данных в файл, но только по прямой линии, а не в требуемом формате

    JSONArray jObj= new JSONArray();
        jObj.add("id->"+id  );      
        jObj.add("faculty->"+faculty );            
        jObj.add("department->"+department );       
        jObj.add("capacity-> "+capacity  );               
        jObj.add("type-> "+type );               
        obj.add(id +":classroom");              
        obj.add(jObj);

         try (FileWriter file = new FileWriter(textName)) {                       
           while(obj.iterator().hasNext())            
           file.write(obj.toJSONString());

Я ожидаю, что результат будет

cmpe025: Classroom          
   [
       location-> cmpe_building,
       capacity-> 70 ,
       inDepartment-> cmpe_department,
       roomNumber-> cmpe025
   ].

cmpe026: Classroom 
   [
       location-> cmpe_building,
       capacity-> 70 ,
       inDepartment-> cmpe_department,
       roomNumber-> cmpe026
   ].

но фактический вывод, который я получаю, без разрыва строки

{ "Classroom" ["location->"cmpe_building"capacity-> 70,"inDepartment->"cmpe_department, "roomNumber->" cmpe025], ["location->" cmpe_building,"capacity->"70 ,"inDepartment->" cmpe_department, "roomNumber->" cmpe026].

1 Ответ

0 голосов
/ 21 декабря 2018

Этот комментарий опубликован как ответ, потому что он слишком большой, чтобы быть комментарием и не отвечает на вопрос, он предлагает лучшее решение, которое не запрашивается.

Если вы хотите, чтобы Prolog былвозможность использовать выводимые вами данные, а затем использовать их в удобном для Пролога виде;создать факты , например

Имя файла: classroom.pl

classroom(cmpe025,cmpe_building,70,cmpe_department).
classroom(cmpe026,cmpe_building,70,cmpe_department).

Обратите внимание, что с фактами Prolog вы не включаете имена значений, Prolog использует положение для идентификацииценности.Самим фактам действительно нужно имя, например, classroom, чтобы иметь возможность однозначно идентифицировать их, в отличие от набора person фактов.

Тогда в Prolog вы можете просто загрузить файл, используя проконсультируйтесь с / 1 , например

consult("C:/classroom.pl").

и используйте его в предикате .Вам придется создавать предикаты в отдельном файле, как если бы вы исходный код.

Имя файла: predicates.pl

test :-
  classroom(Course,Building,Room,Department),
  write("Course: "),write(Course),nl,
  write("Building: "),write(Building),nl,
  write("Room: "),write(Room),nl,
  write("Department: "),write(Department).

Строка

classroom(Course,Building,Room,Department)

читаетценности из фактов классной комнаты.Нет необходимости анализировать данные, переформатировать и т. Д.

Использование SWI-Prolog

Welcome to SWI-Prolog (threaded, 64 bits, version 7.3.35)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

1 ?- consult("C:/predicates.pl").
true.

2 ?- consult("C:/classroom.pl").
true.

3 ?- test.
Course: cmpe025
Building: cmpe_building
Room: 70
Department: cmpe_department
true ;
Course: cmpe026
Building: cmpe_building
Room: 70
Department: cmpe_department
true.

Хотя я бы не рекомендовал это, вы также можете создатьфактов в одной строке файла, просто убедитесь, что между концом одного факта . и началом следующего факта есть пробел classroom,
например ). classroom(

classroom(cmpe025,cmpe_building,70,cmpe_department). classroom(cmpe026,cmpe_building,70,cmpe_department).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...