如何在Common Lisp(ACL)中读取含空白单元格的CSV表格
解决ACL读取含空白单元格CSV的问题
方案1:用ACL内置CSV读取工具(优先选这个)
ACL自带专门解析CSV的命令,能自动识别空白单元格(不管是空值还是带空格的单元格),比手动写read-line循环靠谱太多,还能高效处理大型文件。示例代码:
OPEN DATA "你的文件路径.csv" TYPE CSV DELIMITER "," QUALIFIER "" // 读取全部记录到数据集 READ ALL // 验证结果:空白单元格会显示为<空值>,不会和空格混淆 LIST FIELDS 对象名, 属性1, 属性2, ...
- 要是你的CSV里空白单元格是用引号包裹的空串(比如
"obj1",,"val2"),把QUALIFIER改成"就行,保证空值解析正确。 - 大型文件不用怕性能问题,ACL的CSV读取逻辑是优化过的,比手动循环高效得多。
方案2:手动处理read-line输出(仅适合特殊格式场景)
如果非得用read-line循环,别直接按空格拆分字符串,要按CSV的分隔符(一般是逗号)来拆分,这样空白单元格会被识别为空字符串,而非空格。示例代码:
FILE OPEN INPUT "你的文件路径.csv" TO input_file LOOP READLINE input_file TO line_var IF END OF FILE THEN LEAVE // 按逗号拆分整行,保留空单元格 SPLIT line_var BY "," INTO arr_var // 第一个元素是对象名称 obj_name = arr_var[1] // 后续元素是属性,空单元格会存为"",不会被当成空格 prop1 = arr_var[2] prop2 = arr_var[3] // 这里写你的业务处理逻辑 END LOOP FILE CLOSE input_file
- 注意:如果CSV里有带逗号的单元格(用引号包裹的那种),这个方法会误拆分,这时候还是老老实实用方案1的内置工具。
额外提示
- 先确认你的CSV分隔符:有些用制表符(Tab),要对应修改
DELIMITER或者SPLIT的参数。 - 处理大型文件时,尽量用批量读取(比如
READ ALL),别逐行循环,性能差很多。
内容的提问来源于stack exchange,提问作者ponipei
相关产品推荐
相关产品推荐

