Python 脚本自动对齐 C++ 数组代码
一、前言
在维护 C++ 项目时,常遇到数组元素未对齐的情况,影响可读性。本文提供一个 Python 脚本,自动对齐 C++ 数组,并讲解代码原理与使用方法。
二、问题场景
假设有这样的 C++ 数组:
AlarmInfoAreaA gstAlarmInfoAreaA[]={{0,0, MESSAGE_TYPE2B, SKUI_COLOR_COMMON_LIGHT_YELLOW, SKUI_COLOR_COMMON_NIGHT_YELLOW, MSG_NONE},{1,1, MESSAGE_TYPE2B, SKUI_COLOR_COMMON_LIGHT_YELLOW, SKUI_COLOR_COMMON_NIGHT_YELLOW, MSG_F_CAMERA_BLOCK},{30,6, MESSAGE_TYPE2B, SKUI_COLOR_COMMON_LIGHT_RED, SKUI_COLOR_COMMON_NIGHT_RED, MSG_PLS_BRAKE},// ... 更多行};
对齐后:
AlarmInfoAreaA gstAlarmInfoAreaA[]={{0,0, MESSAGE_TYPE2B, SKUI_COLOR_COMMON_LIGHT_YELLOW, SKUI_COLOR_COMMON_NIGHT_YELLOW, MSG_NONE},
{1,1, MESSAGE_TYPE2B, SKUI_COLOR_COMMON_LIGHT_YELLOW, SKUI_COLOR_COMMON_NIGHT_YELLOW, MSG_F_CAMERA_BLOCK},
{30,6, MESSAGE_TYPE2B, SKUI_COLOR_COMMON_LIGHT_RED, SKUI_COLOR_COMMON_NIGHT_RED, MSG_PLS_BRAKE},// ... 更多行};
三、完整代码
# -*- coding: utf-8 -*-
import re
def align_array():
file_path = r'src\app\wins\MessageWindowConfig.cpp'
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
start_idx = None
end_idx = None
for i, line in enumerate(lines):
if 'AlarmInfoAreaA gstAlarmInfoAreaA[] = {' line:
start_idx = i
start_idx line.strip() == i > start_idx + :
end_idx = i
start_idx end_idx :
()
()
aligned_lines = []
i (start_idx, end_idx + ):
line = lines[i]
line line:
aligned_lines.append(line)
pattern =
= re.(pattern, line.strip())
:
alarm_id = (.group())
icon_id = (.group())
msg_type = .group().strip()
light_color = .group().strip()
night_color = .group().strip()
string_id = .group().strip()
aligned =
aligned_lines.append(aligned + )
:
aligned_lines.append(line)
new_lines = lines[:start_idx] + aligned_lines + lines[end_idx+:]
(file_path, , encoding=) f:
f.writelines(new_lines)
()
__name__ == :
:
align_array()
Exception e:
()
traceback
traceback.print_exc()

