Please enable JavaScript to view this site.

#!/usr/bin/python

# -*- coding: utf-8 -*-

 

from xml.dom import minidom

 

import argparse

import sqlite3 as sqlite

import sys

 

con = None

 

try:

   # Получение аргументов командной строки

   ap = argparse.ArgumentParser(description="Формирование базы данных по связи идентификатора и html страницы")

   ap.add_argument("--outfile", "-o", type = str, default = 'pages.db', \

                   help = "Путь к результирующему файлу базы данных")

   ap.add_argument("--hhfile", "-hh", type = str, default = 'KOMPAS.hh', \

                   help = "Путь к hh-файлу КОМПАС")

   # ap.add_argument("--hhafile", "-hha", type = str, default = 'KOMPAS.hha', \

   #                 help = "Путь к hha-файлу КОМПАС")

   args = ap.parse_args()

 

   print("HH-file: %s, HHA-file: %s, output file: %s\n" % (args.hhfile, args.hhafile, args.outfile))

   # print("HH-file: %s, output file: %s\n" % (args.hhfile, args.outfile))

   

   con = sqlite.connect(args.outfile)

   cur = con.cursor()

 

   print("==> Clean up (1 of 3)")

   # Удалить таблицу с соответствием идентификаторов из hh c html страницами

   cur.execute("DROP TABLE IF EXISTS Page")

   cur.execute("CREATE TABLE Page(Id INTEGER, Page TEXT)")

   print("<== Clean up\n")

 

   # Составляем словарь псевдонимов идентификаторов

   print("==> Reading aliases (2 of 3)")

 

   err_count_hha = 0

   aliases = { }

 

   with open(args.hhafile) as hha:

       for line in hha:

           # Trim comments and whitespace

           s = line.split(';')[0].strip()

 

           # Split by "="

           parts = s.split('=', 1)

 

           # Обработать ошибочную ситуацию

           if len(parts) == 1 and len(parts[0]) > 0:

               print("[ERROR] Invalid line format!")

               err_count_hha = err_count_hha + 1

 

           # Запомнить псевдоним

           if len(parts) == 2:

               print("[OK] %s=%s" % (parts[0], parts[1]))

               aliases[parts[0]] = parts[1]

 

   print("<== Reading aliases (ERRORS: %d)\n" % err_count_hha)

 

   print("==> Creating Page table (3 of 3)")

 

   with open(args.hhfile) as hh:

       for line in hh:

           words = line.split()

           if len(words) >= 3:

               identifier = int(words[2])

               name = words[1]

               if name in aliases:

                   name = aliases[name]

               else:

                   name = name + ".html"

 

               cur.execute("INSERT INTO Page VALUES(%d, '%s')" % (identifier, name))

 

   cur.execute("CREATE INDEX page_id_index ON Page(Id)")

   con.commit()

 

       # Общий отчёт о результате

   print("===DONE (ERRORS: %d)===" % int(err_count_hha))

       

except sqlite.Error as e:

   print("ERROR: %s!" % e.args[0])

   sys.exit(1)

 

finally:

   if con:

       con.close()

 

© ООО «АСКОН-Системы проектирования», 2024. Все права защищены. | Единая телефонная линия: 8-800-700-00-78