45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
import sqlite3
|
|
import re
|
|
import os
|
|
from collections import OrderedDict
|
|
|
|
svd_path = os.path.dirname(__file__)
|
|
# Put database file in the same folder and provide name here
|
|
db_path = svd_path + "/cube-finder-db.db"
|
|
# Table containing part numbers
|
|
pn_table = "cpn"
|
|
# Column containing part numbers
|
|
pn_column = "cpn"
|
|
|
|
def regexp(expr, item):
|
|
reg = re.compile(expr)
|
|
return reg.search(item) is not None
|
|
|
|
files = os.listdir(svd_path)
|
|
regexes = OrderedDict()
|
|
for file in files:
|
|
if file[-4:] == ".svd":
|
|
name=file[0:-4]
|
|
if (name.find("_") != -1):
|
|
name = name[0:name.find("_")]
|
|
# exclude DISCOVERY since otherwise some part numbers match with regular expression
|
|
regexes[file] = "^(?=^" + name.replace("x","[A-Z0-9]") + "[A-Z0-9]*$)(?=^((?!DISCOVERY).)*$).*$"
|
|
|
|
regexes = OrderedDict(sorted(regexes.items(), key=lambda item: item[1]))
|
|
|
|
con = sqlite3.connect(db_path)
|
|
con.create_function("REGEXP", 2, regexp)
|
|
cursor = con.cursor()
|
|
contents = [];
|
|
for file, regex in regexes.items():
|
|
res = str(cursor.execute("SELECT GROUP_CONCAT(mcus,', ') FROM (SELECT DISTINCT SUBSTRING(cpn, 1, 11) as mcus FROM (SELECT " + pn_column + " FROM " + pn_table + " WHERE " + pn_column + " REGEXP '" + regex + "'))").fetchone())
|
|
if res == "(None,)":
|
|
contents.append(file)
|
|
else:
|
|
contents.append(res[2:-3] + ", " + file)
|
|
|
|
with open(svd_path + '/Contents.txt', 'w') as f:
|
|
for line in contents:
|
|
f.write(f"{line}\n")
|
|
|
|
con.close() |