如何用AppleScript提取.gcode文件中以分号开头的行
完善AppleScript实现Gcode文件参数清理功能
功能说明
这段AppleScript可自动清理3D打印的.gcode文件,仅保留所有以分号;开头的参数设置行,移除所有非注释的G代码指令行。
完整可运行代码
-- 自定义列表拼接函数,用于将筛选后的行用换行符连接 on join(lst, delimiter) set prevTIDs to AppleScript's text item delimiters set AppleScript's text item delimiters to delimiter set joinedText to lst as text set AppleScript's text item delimiters to prevTIDs return joinedText end join -- 1. 让用户选择要处理的Gcode文件 set inputFile to choose file with prompt "选择要清理的Gcode文件" of type {"gcode", "txt"} -- 2. 读取文件内容并按行拆分 set fileContent to read inputFile as text set allLines to paragraphs of fileContent -- 3. 筛选出以分号开头的行 set filteredLines to {} repeat with aLine in allLines -- 跳过空行(可选,若需要保留空行可删除此判断) if length of aLine > 0 and aLine starts with ";" then set end of filteredLines to aLine end if end repeat -- 4. 将筛选后的行合并为带换行的文本 set outputContent to join(filteredLines, linefeed) -- 5. 让用户选择清理后文件的保存位置 set inputFileName to name of (info for inputFile) set defaultOutputName to "cleaned_" & inputFileName set outputFile to choose file name with prompt "选择清理后文件的保存位置" default name defaultOutputName default location (path to desktop folder) -- 6. 写入处理后的内容到文件,并处理异常 try set fileHandle to open for access outputFile with write permission write outputContent to fileHandle starting at eof close access fileHandle display dialog "文件清理完成!" & linefeed & "保存路径:" & linefeed & POSIX path of outputFile buttons {"确定"} default button 1 on error errMsg -- 确保文件句柄被关闭 try close access outputFile end try display dialog "处理出错:" & linefeed & errMsg buttons {"确定"} default button 1 with icon stop end try
代码关键细节说明
- 文件选择:通过
choose file和choose file name实现可视化文件选择,支持.gcode和.txt格式,默认保存到桌面并自动添加cleaned_前缀。 - 行筛选逻辑:严格检查每一行是否以
;开头,同时可选跳过空行(若需要保留空行,删除length of aLine > 0 and即可)。 - 文本拼接:自定义
join函数确保筛选后的行之间保留换行符,避免内容挤在一起。 - 错误处理:写入文件时加入异常捕获,防止文件被占用等情况导致的崩溃,并确保文件句柄被正确关闭。
输入输出示例
输入Gcode片段:
;FLAVOR:Marlin
;TIME:1234
;Filament used: 5.6m
G28 ;Home
G1 Z5 F3000
;LAYER_COUNT:20
G1 X10 Y10 F2000
清理后输出:
;FLAVOR:Marlin
;TIME:1234
;Filament used: 5.6m
;LAYER_COUNT:20
内容的提问来源于stack exchange,提问作者GilbertOOl
相关产品推荐
相关产品推荐

