def printing(self, srs_dict: dict = dict()): result_infodict = InfoDict(1) for filename, lines in self.erb_info.dict_main.items(): replaced_lines = ERBRemodel(lines).replace_csvvars( self.csv_infodict, 1, srs_dict) result_infodict.add_dict(filename, replaced_lines) return result_infodict
def crawl_text(self): """웹페이지 내 텍스트를 크롤링하는 함수""" print("현재 ArcaLive 내 게시글만 지원합니다.") while True: print("입력하신 웹페이지 내 텍스트 내용을 크롤링합니다. 공란인 경우 이전으로 돌아갑니다.") target_url = input( "크롤링할 웹페이지 url를 입력해주세요. http나 https가 포함되어야 합니다. : ") if not target_url: # 공란 입력 return None elif target_url.find("arca.live"): html_data = ArcaliveCrawl(target_url) result_data = html_data.txt_data() break else: # 도메인이 아카라이브가 아님 print("현재 ArcaLive 내 게시글만 지원합니다.") if not result_data: print("크롤링된 데이터가 없습니다.") result_infodict = InfoDict("WebCrawl") result_infodict.add_dict(target_url, result_data) return result_infodict
def analyze_erh(self, erh_files=None, encode_type=None): # TODO 본격적으로 만져야함 """return (ERH_infodict, 구동중 통합 dim_dict)""" if not erh_files or not encode_type: erh_files, encode_type = CustomInput("ERH").get_filelist() clsdim = HandleDIM() infodict = InfoDict("ERHInfoDict") for erhname in erh_files: temp_dimdict = dict() lines = ERHLoad(erhname, encode_type).make_bulklines() for line in lines: line.strip() if line.startswith(";"): continue words = line.split() if not words: continue elif words[0].startswith("#DIM"): temp_dimdict.update(clsdim.dim_search(line)) infodict.add_dict(erhname, temp_dimdict) return infodict, clsdim.dim_dict
def convert_to_infodict(self): pd_name = "PreDic" ad_name = "AfterDic" orig_words = InfoDict("orig_words") trans_words = InfoDict("trans_words") for dict_name in (pd_name, ad_name): dictdata = self.filedata.get(dict_name) orig_dict = dict() trans_dict = dict() for order_no, key in enumerate(dictdata): orig_dict[order_no] = key trans_dict[order_no] = dictdata[key] orig_words.add_dict("orig\\" + dict_name, orig_dict) trans_words.add_dict("trans\\" + dict_name, trans_dict) return orig_words, trans_words
def import_all_CSV(self, mode_num=0, csv_files=None, encode_type=None): """InfoDict 클래스를 받아 CSV 변수 자료형 생성 {csv파일명:{csv변수명:숫자}} 또는 {csv파일명:{숫자:csv변수명}} mode_num: bit 기반 모드 필터링 0 = 필터링 없음 0b1 = 숫자/변수명 반전 0b10 = chara 등 미포함 0b100 = srs용 chara 처리 """ print("추출을 시작합니다.") if not csv_files or not encode_type: csv_files, encode_type = CustomInput("CSV").get_filelist() self.dic_assemble = InfoDict(0) count_check = StatusNum(csv_files, "파일", self.debug_log.NameDir) count_check.how_much_there() arg_list = [0, None] # 구별없이 전부 name_filter = [] # 리스트에 포함된 파일명 제외(소문자만 지원) if mode_num: # 만들어도 의미없는 파일 제외 name_filter.extend(("gamebase", "_replace", "variablesize")) if mode_num & 0b1: # 숫자/변수명 반전 있음 name_filter.append("chara") arg_list[0] = 1 if mode_num & 0b10: # chara 미포함 name_filter.extend(("chara", "_rename")) if mode_num & 0b100: # SRS용 인명 처리 arg_list[1] = ["NAME", "名前", "CALLNAME", "呼び名"] # 중복 필터 제거 name_filter = DataFilter().dup_filter(name_filter) for filename in csv_files: if mode_num: if mode_num & 0b100 and "chara" not in filename.lower(): continue else: is_filtered = 0 for name in name_filter: if name in filename.lower(): is_filtered = 1 break if is_filtered: continue csvdata_dict = self.single_csv_read(filename, encode_type, *arg_list) if csvdata_dict == None: # 인식되지 않은 경우 infodict에 추가되지 않음 count_check.error_num += 1 continue self.dic_assemble.add_dict(filename, csvdata_dict) count_check.how_much_done() if count_check.error_num > 0: self.debug_log.if_decode_error() CommonSent.extract_finished() CommonSent.print_line() self.debug_log.sucessful_done() return self.dic_assemble
class CSVFunc: debug_log = LogPreset(1) def import_all_CSV(self, mode_num=0, csv_files=None, encode_type=None): """InfoDict 클래스를 받아 CSV 변수 자료형 생성 {csv파일명:{csv변수명:숫자}} 또는 {csv파일명:{숫자:csv변수명}} mode_num: bit 기반 모드 필터링 0 = 필터링 없음 0b1 = 숫자/변수명 반전 0b10 = chara 등 미포함 0b100 = srs용 chara 처리 """ print("추출을 시작합니다.") if not csv_files or not encode_type: csv_files, encode_type = CustomInput("CSV").get_filelist() self.dic_assemble = InfoDict(0) count_check = StatusNum(csv_files, "파일", self.debug_log.NameDir) count_check.how_much_there() arg_list = [0, None] # 구별없이 전부 name_filter = [] # 리스트에 포함된 파일명 제외(소문자만 지원) if mode_num: # 만들어도 의미없는 파일 제외 name_filter.extend(("gamebase", "_replace", "variablesize")) if mode_num & 0b1: # 숫자/변수명 반전 있음 name_filter.append("chara") arg_list[0] = 1 if mode_num & 0b10: # chara 미포함 name_filter.extend(("chara", "_rename")) if mode_num & 0b100: # SRS용 인명 처리 arg_list[1] = ["NAME", "名前", "CALLNAME", "呼び名"] # 중복 필터 제거 name_filter = DataFilter().dup_filter(name_filter) for filename in csv_files: if mode_num: if mode_num & 0b100 and "chara" not in filename.lower(): continue else: is_filtered = 0 for name in name_filter: if name in filename.lower(): is_filtered = 1 break if is_filtered: continue csvdata_dict = self.single_csv_read(filename, encode_type, *arg_list) if csvdata_dict == None: # 인식되지 않은 경우 infodict에 추가되지 않음 count_check.error_num += 1 continue self.dic_assemble.add_dict(filename, csvdata_dict) count_check.how_much_done() if count_check.error_num > 0: self.debug_log.if_decode_error() CommonSent.extract_finished() CommonSent.print_line() self.debug_log.sucessful_done() return self.dic_assemble def single_csv_read(self, csvname, encode_type="UTF-8", opt=0, filter_list=None): """csv 파일을 읽어 dict형이나 list형을 불러옴. opt 0: {0행:1행}, 1: {1행:0행}, 2:[1행1열,1행2열,...] """ csv_data = CSVLoad(csvname, encode_type) self.debug_log.write_loaded_log(csvname) try: if opt in (0, 1): if "chara" in csvname.lower(): csv_data.chara_csv(filter_list) else: csv_data.core_csv(opt, filter_list) the_result = DataFilter().erase_quote(csv_data.dict_csvdata) elif opt == 2: csv_data.core_csv() the_result = DataFilter().dup_filter(csv_data.list_csvdata) except UnicodeDecodeError as UniDecode: if opt == 2: self.debug_log.if_decode_error() self.debug_log.write_error_log(UniDecode, csvname) the_result = None return the_result def make_csv_var_dict(self, csv_files=None, encode_type=None): """{csv변수명:[파일명,번호]} 형태 딕셔너리 제작""" print("csv 변수 대응 딕셔너리를 제작합니다.") if not csv_files or not encode_type: csv_files, encode_type = CustomInput("CSV").get_filelist() count_check = StatusNum(csv_files, "파일", self.debug_log.NameDir) count_check.how_much_there() csvvar_dict = {} all_var_list = [] dup_count = 0 for csvname in csv_files: csvdata_dict = self.single_csv_read(csvname, encode_type, 1) # {변수명:숫자} if csvdata_dict == None: count_check.error_num += 1 continue for var in csvdata_dict.keys(): if var == "": continue core_var = var var = var.split(";")[0] nospace_var = var.replace(" ", "__") all_var_list.append(var) try: if csvvar_dict.get(nospace_var): dup_count = all_var_list.count(var) - 1 csvvar_dict["dup{}_{}".format( dup_count, nospace_var)] = [ csvname, int(csvdata_dict[core_var]), ] else: csvvar_dict[nospace_var] = [ csvname, int(csvdata_dict[core_var]) ] except ValueError: continue count_check.how_much_done() total_dup = len(all_var_list) - len(set(all_var_list)) if dup_count != 0: print("{}건의 중복변수가 존재합니다. 추후 유의해주세요.".format(total_dup)) if count_check.error_num > 0: self.debug_log.if_decode_error() CommonSent.extract_finished() CommonSent.print_line() self.debug_log.sucessful_done() return csvvar_dict
def anal_erbs(self, mod: int = 0b111): """ERB 파일 분석 함수. mod 설정정보 bit 0 : 함수, bit 1 : CSV변수, bit 2: DIM변수 """ self.erb_infdict = InfoDict(1) for erb in self.bring.search_filelist(".ERB"): with open(erb, "r", encoding=self.encode_type) as erbfile: self.erb_infdict.add_dict(erb, erbfile.readlines()) self.anal_erhs() if mod & 0b001: # Function 처리 def_funcinfo = FuncInfo() use_funcinfo = FuncInfo() mis_funcs = [] if mod & 0b010: # CSV Var 처리 csv_varlist = [] if mod & 0b100: # DIM Var 처리 handle_dim = HandleDIM() for erbname, lines in self.erb_infdict.dict_main.items(): # line당 여건 체크 for line in lines: line.strip() if line.startswith(";"): # Comment continue words = line.split() if not words: continue if mod & 0b001: # Function head = words[0] if mod & 0b001 and head in ("TRYCALLFORM", "TRYCCALLFORM", "TRYCALL", "CALLFORM", "CALLF", "CALL"): words.pop(0) funcname = " ".join(words).split("(")[0] try: int(funcname) except ValueError: use_funcinfo.add_dict(funcname, [ funcname, ], erbname) elif mod & 0b001 and head.startswith("@"): funcname = head.replace("@", "").split("(")[0].split(",")[0] def_funcinfo.add_dict(funcname, [ funcname, ], erbname) if mod & 0b010: # CSV Vars result = self.vfinder.find_csvfnc_line(line) if result: csv_varlist.extend(result) if mod & 0b100 and words[0].startswith("#DIM"): # DIM Vars self.dim_dict.update( handle_dim.dim_search(line)) # TODO DIM 분석필요 # 결과물 처리 부분 used_csvvar = [] index_csvvar = [] if mod & 0b001: # Function for used_func in use_funcinfo.func_dict: if not def_funcinfo.func_dict.get(used_func): mis_funcs.append(used_func) if mod & 0b010: # CSV Vars changed_csvvar = self.vfinder.change_var_index(csv_varlist, 1) changed_csvvar = DataFilter().dup_filter(changed_csvvar) used_csvvar, index_csvvar = self.vfinder.print_csvfnc( changed_csvvar, 0b1100) index_csvvar = self.compare_csvvar(index_csvvar) return mis_funcs, used_csvvar, index_csvvar
class AnalyzeFiles: def __init__(self, bringfiles: BringFiles, encode_type: str): self.bring = bringfiles self.encode_type = encode_type self.dim_dict: dict[str, list[str]] = dict() def anal_erbs(self, mod: int = 0b111): """ERB 파일 분석 함수. mod 설정정보 bit 0 : 함수, bit 1 : CSV변수, bit 2: DIM변수 """ self.erb_infdict = InfoDict(1) for erb in self.bring.search_filelist(".ERB"): with open(erb, "r", encoding=self.encode_type) as erbfile: self.erb_infdict.add_dict(erb, erbfile.readlines()) self.anal_erhs() if mod & 0b001: # Function 처리 def_funcinfo = FuncInfo() use_funcinfo = FuncInfo() mis_funcs = [] if mod & 0b010: # CSV Var 처리 csv_varlist = [] if mod & 0b100: # DIM Var 처리 handle_dim = HandleDIM() for erbname, lines in self.erb_infdict.dict_main.items(): # line당 여건 체크 for line in lines: line.strip() if line.startswith(";"): # Comment continue words = line.split() if not words: continue if mod & 0b001: # Function head = words[0] if mod & 0b001 and head in ("TRYCALLFORM", "TRYCCALLFORM", "TRYCALL", "CALLFORM", "CALLF", "CALL"): words.pop(0) funcname = " ".join(words).split("(")[0] try: int(funcname) except ValueError: use_funcinfo.add_dict(funcname, [ funcname, ], erbname) elif mod & 0b001 and head.startswith("@"): funcname = head.replace("@", "").split("(")[0].split(",")[0] def_funcinfo.add_dict(funcname, [ funcname, ], erbname) if mod & 0b010: # CSV Vars result = self.vfinder.find_csvfnc_line(line) if result: csv_varlist.extend(result) if mod & 0b100 and words[0].startswith("#DIM"): # DIM Vars self.dim_dict.update( handle_dim.dim_search(line)) # TODO DIM 분석필요 # 결과물 처리 부분 used_csvvar = [] index_csvvar = [] if mod & 0b001: # Function for used_func in use_funcinfo.func_dict: if not def_funcinfo.func_dict.get(used_func): mis_funcs.append(used_func) if mod & 0b010: # CSV Vars changed_csvvar = self.vfinder.change_var_index(csv_varlist, 1) changed_csvvar = DataFilter().dup_filter(changed_csvvar) used_csvvar, index_csvvar = self.vfinder.print_csvfnc( changed_csvvar, 0b1100) index_csvvar = self.compare_csvvar(index_csvvar) return mis_funcs, used_csvvar, index_csvvar def anal_erhs(self) -> dict[str, list[str]]: """분석할 ERB의 기반 ERH를 분석해 그 결과값을 dict형태로 반환함""" erh_files = self.bring.search_filelist(".ERH") if not erh_files: # 주어진 구상 폴더 내에 ERH 파일이 없음 return {} _, temp_dimdict = ERHFunc().analyze_erh(erh_files, self.encode_type) self.dim_dict.update(temp_dimdict) return temp_dimdict def anal_csvs(self, f_csvinfo: InfoDict, t_csvinfo: InfoDict) -> dict: self.vfinder = ERBVFinder(f_csvinfo) self.t_vfinder = ERBVFinder(t_csvinfo) srs_dict, *_ = SRSFunc().build_srsdict(f_csvinfo, t_csvinfo) return srs_dict def compare_csvvar(self, used_list: list[str]): """index 기반 사용 변수 list를 받아 처리되지 않은 list 반환""" not_checked = used_list.copy() for var in used_list: is_dim = False csvname, *vardata = var.split(":") var_context = vardata[-1] if self.t_vfinder.extra_dict.get( csvname): # csvname != 일반적 filename csvname: str = self.t_vfinder.extra_dict[csvname] csv_filename: str = self.t_vfinder.csv_fnames.get(csvname) if csv_filename: if self.dim_dict.get( var_context): # dim_dict 에서 찾을 수 있는 var_context인 경우 var_context = self.dim_dict[var_context][0] # 일단 1차원만 상정 is_dim = True if self.t_vfinder.csv_infodict.dict_main[csv_filename].get( var_context): # 해당 var_context가 목록에 존재하는 경우 trans_var = var elif is_dim: vardata[-1] = var_context trans_var = csvname + ":" + ":".join(vardata) else: continue try: not_checked.pop(not_checked.index(trans_var)) except ValueError: pass return not_checked
def __init__(self): self.result_infodict = InfoDict(1)
class ERBFunc: func_log = LogPreset("ERBwork") def __init__(self): self.result_infodict = InfoDict(1) def extract_printfunc(self, erb_files=None, encode_type=None, opt=0): """ERB 파일 내 출력문 데이터를 추출하는 함수 opt bit 1 : 차트 내 중복 context 제거, 2: 파일당 차트 할당, 3: 공백 출력안함 """ print("PRINT/DATAFORM 구문의 추출을 시작합니다.") if not erb_files or not encode_type: erb_files, encode_type = CustomInput("ERB").get_filelist() file_count_check = StatusNum(erb_files, "파일") file_count_check.how_much_there() result_sheet = SheetInfo() sheet_tags = ["COM_type", "context"] if not opt & 0b10: # 파일당 차트 할당 아님 sheet_tags.insert(0, "file") sheetname = "print_sent" result_sheet.add_sheet(sheetname, sheet_tags) if opt & 0b1: # 중복 후처리 dup_list = list() for filename in erb_files: bulk_lines = ERBLoad(filename, encode_type) if opt & 0b10: # 파일당 차트 할당 sheetname = filename result_sheet.add_sheet(sheetname, sheet_tags) if opt & 0b1000: # 주석처리 모드 printfunc_list = [ line for line in bulk_lines.make_erblines() if line.find(";") ] else: printfunc_list = bulk_lines.search_line( "PRINT", "DATA", except_args=["PRINTDATA", "DATALIST"], opt=0b1) for line in printfunc_list: comtype = line.split()[0] context = " ".join(line.split()[1:]) if opt & 0b1: # 중복 후처리 if dup_list.count(context): continue else: dup_list.append(context) if opt & 0b100: # 공백 처리안함 if not context: continue result_sheet.add_row(sheetname, file=filename, COM_type=comtype, context=context) file_count_check.how_much_done() CommonSent.extract_finished() self.func_log.sucessful_done() if opt & 0b1 and dup_list: print("중복으로 발견되어 누락 처리한 문장이 한 개 이상 존재합니다. 이후 처리에 유의해주세요.") return result_sheet # SheetInfo def search_csv_var(self, erb_files=None, encode_type=None, opt=0): """ERB 파일 내 사용된 csv 변수 목록 출력 opt bit 1: 참이면 CSV별 차트, 아니면 ERB별 차트 """ print("ERB 파일에서 사용된 CSV 변수목록을 추출합니다.") if not erb_files or not encode_type: erb_files, encode_type = CustomInput("ERB").get_filelist() csvvar_list = ERBUtil().csv_infodict_maker() if csvvar_list == None: try: csvvar_list = CSVFunc().single_csv_read("CSVfnclist.csv", opt=2) except: print("설정 정보가 없어 실행이 불가합니다.") return None vfinder = ERBVFinder(csvvar_list) file_count_check = StatusNum(erb_files, "파일") file_count_check.how_much_there() result_sheet = SheetInfo() sheet_tags = ["file", "var_name", "orig_word"] for filename in erb_files: erb_bulk = ERBLoad(filename, encode_type).make_erblines() self.func_log.write_loaded_log(filename) if not opt & 0b1: # ERB별 차트 result_sheet.add_sheet(filename, sheet_tags) sheet_name = filename file_results = [] for line in erb_bulk: vars_list = vfinder.find_csvfnc_line(line) if vars_list: file_results.extend(vars_list) dup_res_list = DataFilter().dup_filter(file_results) for var_info in dup_res_list: varhead, varname, _, _ = var_info context = vfinder.print_csvfnc([ var_info, ])[0] if opt & 0b1: sheet_name = varhead if sheet_name not in result_sheet.sheetdict.keys(): result_sheet.add_sheet(sheet_name, sheet_tags) f_name = filename else: f_name = varhead result_sheet.add_row(sheet_name, file=f_name, var_name=varname, orig_word=context) file_count_check.how_much_done() CommonSent.extract_finished() self.func_log.sucessful_done() return result_sheet # SheetInfo def remodel_indent(self, metainfo_option_num=0, metalineinfo=None): if metalineinfo == None: print("들여쓰기를 자동 교정하는 유틸리티입니다.") erb_files, encode_type = CustomInput("ERB").get_filelist() file_count_check = StatusNum(erb_files, "파일") file_count_check.how_much_there() for filename in erb_files: erb_bulk = ERBLoad(filename, encode_type).make_erblines() lines = (ERBUtil().make_metainfo_lines(erb_bulk, metainfo_option_num, filename).linelist) lines.insert(0, [0, 0, 0, ";{}에서 불러옴\n".format(filename)]) temp_metainfo = ERBMetaInfo() temp_metainfo.linelist = lines self.result_infodict.add_dict( filename, ERBUtil().indent_maker(temp_metainfo)) file_count_check.how_much_done() result_dataset = self.result_infodict # InfoDict 클래스 {파일명:[들여쓰기 처리된 lines]} else: if isinstance(metalineinfo, list): # metaline 없는 순수 lines 일 때 metalineinfo = ERBUtil().make_metainfo_lines( metalineinfo, metainfo_option_num) result_dataset = ERBUtil().indent_maker( metalineinfo) # [들여쓰기 처리된 lines] CommonSent.extract_finished() self.func_log.sucessful_done() return result_dataset def translate_txt_to_erb(self, era_type, csvvar_dict): txt_files, encode_type = CustomInput("TXT").get_filelist() file_count_check = StatusNum(txt_files, "파일") file_count_check.how_much_there() chara_num = input("작성하실 캐릭터의 번호를 입력해주세요. : ") self.comp_lines = [] for filename in txt_files: file_lines = ERBWrite(filename, encode_type, era_type, chara_num).txt_to_erblines(csvvar_dict) print("{}의 처리가 완료되었습니다.".format(filename)) self.comp_lines.extend(file_lines) file_count_check.how_much_done() erb_metainfo = ERBUtil().make_metainfo_lines(self.comp_lines, 0, filename) self.func_log.sucessful_done() return erb_metainfo def replace_num_or_name(self, mod_num=0, erb_files=None, encode_type=None): """0:숫자 > 변수, 1: 변수 > 숫자""" if not erb_files or not encode_type: erb_files, encode_type = CustomInput("ERB").get_filelist() file_count_check = StatusNum(erb_files, "ERB 파일") file_count_check.how_much_there() csv_infodict = ERBUtil().csv_infodict_maker(mod_num + 1, self.func_log) print("ERB내 index 변환작업을 시작합니다.") for filename in erb_files: erblines = ERBLoad(filename, encode_type).make_erblines() replaced_lines = ERBRemodel(erblines).replace_csvvars( csv_infodict, mod_num) self.result_infodict.add_dict(filename, replaced_lines) file_count_check.how_much_done() CommonSent.extract_finished() self.func_log.sucessful_done() return self.result_infodict # {파일명:[바뀐줄]} def remodel_equation(self, metainfo_option_num=2, metalineinfo=None): mod_dict = {1: "중첩 PRNTDATA 변환"} if metalineinfo == None: print("불완전한 수식을 교정해주는 유틸리티입니다.") erb_files, encode_type = CustomInput("ERB").get_filelist() file_count_check = StatusNum(erb_files, "파일") file_count_check.how_much_there() mod_no = MenuPreset().select_mod(mod_dict) for filename in erb_files: erb_bulk = ERBLoad(filename, encode_type).make_erblines() lines = (ERBUtil().make_metainfo_lines(erb_bulk, metainfo_option_num, filename).linelist) lines.insert(0, [0, 0, 0, ";{}에서 불러옴\n".format(filename)]) temp_metainfo = ERBMetaInfo() temp_metainfo.linelist = lines self.result_infodict.add_dict( filename, ERBUtil().grammar_corrector(temp_metainfo, mod_no)) file_count_check.how_much_done() result_dataset = self.result_infodict # InfoDict 클래스 {파일명:ERBMetaInfo 클래스 메소드} else: mod_no = MenuPreset().select_mod(mod_dict, 0b1) result_dataset = ERBUtil().grammar_corrector( metalineinfo, mod_no) # ERBMetaInfo 클래스 메소드 CommonSent.extract_finished() self.func_log.sucessful_done() return result_dataset def memory_optimizer(self, erb_files=None, encode_type=None): print("현재 기능이 완성되지 않았습니다. 되도록 백업 후 이용해주시고, 구상 파일에만 사용해주세요.") if not erb_files or not encode_type: erb_files, encode_type = CustomInput("ERB").get_filelist() file_count_check = StatusNum(erb_files, "파일") file_count_check.how_much_there() for filename in erb_files: erblines = ERBLoad(filename, encode_type).make_erblines() optmized_lines = ERBRemodel(erblines).memory_optimize() self.result_infodict.add_dict(filename, optmized_lines) file_count_check.how_much_done() CommonSent.extract_finished() self.func_log.sucessful_done() return self.result_infodict # {파일명:lines} 형태가 포함된 infodict def erb_trans_helper(self): # TODO 공사중 """번역본의 원본 이식에 도움을 주는 함수""" print("원본 erb의 디렉토리를 지정해주세요.") o_blkdata = ERBBlkFinder() print("번역본 erb의 디렉토리를 지정해주세요.") t_blkdata = ERBBlkFinder() # TODO 이름만 다른 파일 비교 가능하게 - CompareErb.csv 활용 def db_erb_finder(self, erb_files=None, encode_type=None, tag=None): """데이터베이스형 ERB 자료 추출 함수""" print("되도록 필요한 파일만 있는 폴더를 만든 후 그곳에서 진행해주세요.", "추후 복수의 파일을 비교하고자 하는 경우, 각 파일의 파일명은 같아야 합니다.", sep="\n") if not erb_files or not encode_type: erb_files, encode_type = CustomInput("ERB").get_filelist() while True: if not tag: tag = input("필요한 데이터 형식의 앞말을 붙여넣어주세요.: ") adj_yn = MenuPreset().yesno( "AAA/BBB/CCC 꼴의 데이터인 경우, 각 요소별 분할이 가능합니다.", "분할을 시도하시겠습니까?") case_yn = MenuPreset().yesno( "CASE XXX ~ tag AAA 꼴의 데이터인 경우 CASE를 활용한 좀 더 정확한 계산이 가능합니다.", "해당 작업을 시도하시겠습니까?") adj_res = "Yes" if adj_yn else "No" case_res = "Yes" if case_yn else "No" if not MenuPreset().yesno( "tag: %s, 분할 시도: %s, CASE 사용: %s가 맞습니까?" % (tag, adj_res, case_res)): if MenuPreset().yesno("작업을 취소할까요?"): return None continue break for erbname in erb_files: erb_load = ERBLoad(erbname, encode_type) erblines = erb_load.make_erblines() self.result_infodict.add_dict( erbname, DataBaseERB().collect_adj(erblines, tag, adj_yn, case_yn)) return self.result_infodict
def __init__(self): self.block_data = InfoDict(1) # {filename:{index:(func,(code_block))}} self.files, self.encode_type = CustomInput("ERB").get_filelist()