diff --git a/Delphi10/开发档案/ReplaceDfm.py b/Delphi10/开发档案/ReplaceDfm.py new file mode 100644 index 0000000..e181671 --- /dev/null +++ b/Delphi10/开发档案/ReplaceDfm.py @@ -0,0 +1,72 @@ +import os +import logging + +# 设置日志记录 +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + +directory_path = r'D:\Dp10RepoV1\项目代码\D10xhGemei\T02贸易汇总仓库' +# 定义替换列表 +replacements = [ + ('支序', '卷号'), + ('支数', '匹数') + +] + + +def replace_in_file(file_path, replacements, encodings=['utf-8', 'gbk']): + temp_file_path = file_path + '.tmp' + try: + # 尝试使用提供的编码列表打开文件 + for encoding in encodings: + try: + with open(file_path, 'r', encoding=encoding) as infile, \ + open(temp_file_path, 'w', encoding=encoding) as outfile: + # 读取整个文件内容到一个字符串中 + file_content = infile.read() + # 对文件内容进行所有替换操作 + for old, new in replacements: + + file_content = file_content.replace(old, new) + # 将替换后的内容写回临时文件 + outfile.write(file_content) + # 使用os.replace原子性地替换原文件 + os.replace(temp_file_path, file_path) + logging.info(f"Successfully processed file: {file_path} using encoding {encoding}") + break # 成功处理后跳出循环 + except UnicodeDecodeError: + # 如果当前编码失败,则尝试下一个编码 + logging.warning(f"Failed to decode file {file_path} using encoding {encoding}") + else: + # 如果所有编码都失败,则记录错误并删除临时文件(如果存在) + logging.error(f"Failed to process file {file_path} with all provided encodings") + if os.path.exists(temp_file_path): + os.remove(temp_file_path) + except Exception as e: + logging.error(f"Error processing file {file_path}: {e}") + if os.path.exists(temp_file_path): + os.remove(temp_file_path) + +def convert_to_unicode(replacements): + unicode_replacements = [] + for original, replacement in replacements: + # 将每个字符转换为Unicode编码 + original_unicode = ''.join(f'#{ord(char)}' for char in original) + replacement_unicode = ''.join(f'#{ord(char)}' for char in replacement) + unicode_replacements.append((original_unicode, replacement_unicode)) + return unicode_replacements + +def replace_in_folder(folder_path, replacements, encodings=['utf-8', 'gbk']): + for root, dirs, files in os.walk(folder_path): + for file_name in files: + if file_name.endswith('.dfm'): + file_path = os.path.join(root, file_name) + replace_in_file(file_path, replacements, encodings) + + + + + + +# 执行替换操作 + +replace_in_folder(directory_path, convert_to_unicode(replacements) ) \ No newline at end of file diff --git a/Delphi10/开发档案/皮肤样式/skin.py b/Delphi10/开发档案/皮肤样式/skin.py index 7fa4b7f..88649fd 100644 --- a/Delphi10/开发档案/皮肤样式/skin.py +++ b/Delphi10/开发档案/皮肤样式/skin.py @@ -1,6 +1,9 @@ import os import logging +import chardet # pip install chardet +# 替换为你的目录路径 +directory_path = r'D:\Dp10RepoV1\项目代码\D10myWeiao' # T01贸易生产计划 T02贸易汇总仓库 # 设置日志记录 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') @@ -69,46 +72,88 @@ replacements = [ ] -def replace_in_file(file_path, replacements, encodings=['utf-8', 'gbk']): +def replace_in_file(file_path, replacements): temp_file_path = file_path + '.tmp' try: - # 尝试使用提供的编码列表打开文件 - for encoding in encodings: - try: - with open(file_path, 'r', encoding=encoding) as infile, \ - open(temp_file_path, 'w', encoding=encoding) as outfile: - # 读取整个文件内容到一个字符串中 - file_content = infile.read() - # 对文件内容进行所有替换操作 - for old, new in replacements: - file_content = file_content.replace(old, new) - # 将替换后的内容写回临时文件 - outfile.write(file_content) - # 使用os.replace原子性地替换原文件 - os.replace(temp_file_path, file_path) - logging.info(f"Successfully processed file: {file_path} using encoding {encoding}") - break # 成功处理后跳出循环 - except UnicodeDecodeError: - # 如果当前编码失败,则尝试下一个编码 - logging.warning(f"Failed to decode file {file_path} using encoding {encoding}") - else: - # 如果所有编码都失败,则记录错误并删除临时文件(如果存在) - logging.error(f"Failed to process file {file_path} with all provided encodings") - if os.path.exists(temp_file_path): - os.remove(temp_file_path) + # 使用chardet检测文件编码 + with open(file_path, 'rb') as infile: + raw_data = infile.read() + detected_encoding = chardet.detect(raw_data)['encoding'] + with open(file_path, 'r', encoding=detected_encoding) as infile, \ + open(temp_file_path, 'w', encoding=detected_encoding) as outfile: + # 读取整个文件内容到一个字符串中 + file_content = infile.read() + # 对文件内容进行所有替换操作 + for old, new in replacements: + file_content = file_content.replace(old, new) + # 将替换后的内容写回临时文件 + outfile.write(file_content) + # 使用os.replace原子性地替换原文件 + os.replace(temp_file_path, file_path) + logging.info(f"Successfully processed file: {file_path} using encoding {detected_encoding}") except Exception as e: logging.error(f"Error processing file {file_path}: {e}") if os.path.exists(temp_file_path): os.remove(temp_file_path) -def replace_in_folder(folder_path, replacements, encodings=['utf-8', 'gbk']): +# =========================================批处理上述运行后出现逗号紧挨着分号的情况============================== + +def remove_empty_lines_in_first_50_lines(filename): + with open(filename, 'rb') as file: + raw_data = file.read() + detected_encoding = chardet.detect(raw_data)['encoding'] + with open(filename, 'r', encoding=detected_encoding) as file: + lines = file.readlines() + non_empty_lines = [line for line in lines[:50] if line.strip() != ''] + with open(filename, 'w', encoding=detected_encoding) as file: + file.writelines(non_empty_lines + lines[50:]) + + +def remove_single_semicolon_lines(filename): + with open(filename, 'rb') as file: + raw_data = file.read() + detected_encoding = chardet.detect(raw_data)['encoding'] + with open(filename, 'r', encoding=detected_encoding) as file: + lines = file.readlines() + non_single_semicolon_lines = [line for line in lines if line.strip() != ';' and line.strip() != ''] + with open(filename, 'w', encoding=detected_encoding) as file: + file.writelines(non_single_semicolon_lines) + + +def modify_last_comma_line(filename): + with open(filename, 'rb') as file: + raw_data = file.read() + detected_encoding = chardet.detect(raw_data)['encoding'] + with open(filename, 'r', encoding=detected_encoding) as file: + lines = file.readlines() + if len(lines) > 50: + first_50_lines = lines[:50] + # 找到仅包含 "type" 的行 + type_lines = [line for line in first_50_lines if "type" in line] + if type_lines: + # 获取 "type" 行的上一行 + last_type_line_index = first_50_lines.index(type_lines[-1]) - 1 + last_type_line = first_50_lines[last_type_line_index] + if last_type_line.strip().endswith(','): + # 找到最后一个逗号的位置 + last_comma_index = last_type_line.rfind(',') + # 将最后一个逗号替换为分号 + lines[lines.index(last_type_line)] = last_type_line[:last_comma_index] + ';\n' + with open(filename, 'w', encoding=detected_encoding) as file: + file.writelines(lines) + + +def replace_in_folder(folder_path, replacements): for root, dirs, files in os.walk(folder_path): for file_name in files: if file_name.endswith('.pas'): file_path = os.path.join(root, file_name) - replace_in_file(file_path, replacements, encodings) + replace_in_file(file_path, replacements) + remove_empty_lines_in_first_50_lines(file_path) + remove_single_semicolon_lines(file_path) + modify_last_comma_line(file_path) # 执行替换操作 -replace_in_folder(r'D:\Dp10Repo\项目代码\D10gmXinde', replacements) \ No newline at end of file +replace_in_folder(directory_path, replacements)