在CAE工程仿真中,模型规模变大过后,HyperMesh导出的模型文件如.inp,有可能出现多余空行。这些空行在求解器中引发格式报错。
起初我习惯用Notepad++的「移除空行」功能快速清理,但近期发现在使用其中某个版本的时候它存在Bug:在处理某些编码或特殊换行符的文件时,点击「移除空行」或者「移除空行(包括空白字符)」会直接清空整个文件内容。而内网环境又限制了其他编辑器的安装,只能另寻他法。
Notepad++的「一键移除」功能不可靠,但我们可以通过正则表达式替换手动实现安全的空行清理,核心思路是将连续的换行符替换为单个换行符。
在Notepad++的「替换」窗口中:
\r\n\r\n(代表连续两个回车换行,即一个空行)\r\n(代表单个回车换行)\r | ||
\n | ||
\r\n | ||
\r\n\r\n |
💡 提示:在Linux/macOS系统中,换行符仅为
\n,替换规则需改为\n\n→\n。
当内网完全限制第三方工具时,我们可以通过HyperMesh自带的TCL脚本引擎,编写代码直接在软件内部完成空行清理,彻底摆脱对外部编辑器的依赖。
# 作者:TodayCAEer
# 功能:清除文本文件中的空行(兼容Windows换行符\r\n)
# 适用场景:HyperMesh导出模型文件空行清理、内网无第三方编辑器环境
namespaceeval ::TodayCAEer::RemoveEmptyLines {
# 定义主函数
proc remove_empty_lines {input_file output_file} {
# 检查输入文件是否存在
if {![file exists $input_file]} {
error"输入文件不存在:$input_file"
}
# 打开输入文件读取
set in_fh [open$input_file r]
# 打开输出文件写入
set out_fh [open$output_file w]
# 逐行读取并过滤空行
while {[gets$in_fh line] != -1} {
# 去除行首尾空白字符后判断是否为空
set trimmed_line [string trim $line]
if {$trimmed_line ne ""} {
# 写入非空行(保持原换行格式)
puts$out_fh$line
}
}
# 关闭文件句柄
close$in_fh
close$out_fh
puts"空行清理完成!输出文件:$output_file"
}
}
# ------------------- 使用示例 -------------------
# 替换为你的实际文件路径(注意:Windows路径需用/或\\转义)
set input_file "C:/CAE_models/exported_model.inp"
set output_file "C:/CAE_models/cleaned_model.inp"
# 调用函数执行清理
::TodayCAEer::RemoveEmptyLines::remove_empty_lines $input_file $output_file TodayCAEer命名空间隔离代码,避免与HyperMesh内置命令冲突。string trim去除行首尾空白字符后,仅保留非空行,彻底清除纯空白行和仅含空格/制表符的行。\r\n换行格式,无需手动处理转义字符。两种方法都能完美规避Notepad++「移除空行」功能的Bug,确保模型文件格式规范、数据安全。