解决一个擦除的bug

This commit is contained in:
2026-07-21 20:18:28 +08:00
parent f50b9c9e66
commit 66a1e8fd6a
25 changed files with 2005 additions and 61 deletions

107
fix_remaining.py Normal file
View File

@@ -0,0 +1,107 @@
import sys, os
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
rep = chr(0xfffd)
base = 'D:\\Code\\DTU 程序\\STM32F4-Base\\'
all_fixes = [
# (filename, pattern_to_match, replacement_full_line_fragment)
# ch395f.c
('ch395f.c', 'rx_buf[' + rep + '? * 阻塞', 'rx_buf] * 阻塞'),
('ch395f.c', '默认值10' + rep + '?秒)', '默认值10 秒)'),
('ch395f.c', '默认值3' + rep + '? uint8_t', '默认值3 uint8_t'),
# ch395f_test.c
('ch395f_test.c', '回显' + rep + '? \ufffd?PING', '回显PING'),
('ch395f_test.c', '创建' + rep + '? UDP', '创建 UDP'),
('ch395f_test.c', 'IP打印结果 ' + rep + '?广播', 'IP打印结果广播'),
# gd5f2gq5ue.c
('gd5f2gq5ue.c', '块对' + rep + '? * size', '块对齐 * size'),
# sd2506.c
('sd2506.c', '个位存入' + rep + '4 ', '个位存入低 4 '),
# tpafe5160.c
('tpafe5160.c', '6位数据总线' + rep + '?GPIOG', '16位数据总线GPIOG'),
('tpafe5160.c', '滞后约 18-24ns' + rep + '? *', '滞后约 18-24ns*'),
('tpafe5160.c', '电压' + rep + '? float', '电压值 float'),
('tpafe5160.c', 'IDR ' + rep + '?6位', 'IDR 16位'),
('tpafe5160.c', '~18ns ' + rep + '?RD 引脚', '~18nsRD 引脚'),
]
# Additional generic cleanups for things our fixes missed
# These handle cases where ? should be a specific Chinese character or punctuation
more_fixes = [
# Closing paren patterns
('ch395f.c', rep + '?\ufffd?' + u'10\ufffd?' + u'\u79d2', ' '),
('tpafe5160.c', u'\ufffd?' + u'HELLO', ''),
]
# Remaining problematic patterns from output
specific = [
# ch395f_test.c - the ?HELLO issue
('Drivers\\BSP\\CH395F\\ch395f_test.c', u'结果 ' + rep + '?' + u'广播', u'结果,广播'),
# tpafe5160 line with multiple corruptions
('Drivers\\BSP\\TPAFE5160\\tpafe5160.c', u'总线' + rep + '?GPIOG', u'总线GPIOG'),
]
total_fixed = 0
for fname, needle, replacement in all_fixes:
path = None
for f in ['Drivers\\BSP\\CH395F\\ch395f.c', 'Drivers\\BSP\\CH395F\\ch395f_test.c',
'Drivers\\BSP\\GD5F2GQ5UE\\gd5f2gq5ue.c', 'Drivers\\BSP\\NET\\net_select.c',
'Drivers\\BSP\\SD2506\\sd2506.c', 'Drivers\\BSP\\TPAFE5160\\tpafe5160.c']:
if fname in f:
path = base + f
break
if path is None:
continue
with open(path, 'rb') as f:
raw = f.read()
text = raw.decode('utf-8', errors='replace')
before = text.count(rep)
if needle in text:
text = text.replace(needle, replacement)
after = text.count(rep)
fixed = before - after
total_fixed += fixed
print('{}: fixed ({} -> {})'.format(fname, before, after))
else:
# Check what's actually in the file
lines = text.split(chr(10))
found = False
search_prefix = needle[:10]
for i, line in enumerate(lines, 1):
if rep in line and search_prefix in line:
idx = line.index(rep)
ctx = line[max(0,idx-20):idx+20]
print('{}: pattern not matched, closest at L{}: ...{}...'.format(fname, i, ctx))
found = True
break
if not found:
print('{}: pattern not found at all'.format(fname))
with open(path, 'wb') as f:
f.write(text.encode('utf-8'))
print('\nTotal fixed this pass: {}'.format(total_fixed))
# Show remaining
print('\n=== REMAINING ===')
for fname in ['Drivers\\BSP\\CH395F\\ch395f.c', 'Drivers\\BSP\\CH395F\\ch395f_test.c',
'Drivers\\BSP\\GD5F2GQ5UE\\gd5f2gq5ue.c', 'Drivers\\BSP\\NET\\net_select.c',
'Drivers\\BSP\\SD2506\\sd2506.c', 'Drivers\\BSP\\TPAFE5160\\tpafe5160.c']:
path = base + fname
with open(path, 'rb') as f:
text = f.read().decode('utf-8', errors='replace')
remaining = text.count(rep)
if remaining > 0:
print('\n--- {} remaining in {} ---'.format(remaining, fname))
for i, line in enumerate(text.split(chr(10)), 1):
if rep in line:
idx = line.index(rep)
left = line[max(0,idx-40):idx]
right = line[idx+2:idx+40]
print('L{}: ...{}[?]{}...'.format(i, left, right))