【发布时间】:2016-07-05 14:44:10
【问题描述】:
我需要在 prolog 中读取不同的 CSV 文件,有些行格式为 0'\t,其他文件格式为空格 0'。
我用过:
read_points(Filename, Points) :-
csv_read_file(Filename, P,[convert(true),functor(pt),separator(0'\t)]),
csv_read_file(Filename, P,[convert(true),functor(pt),separator(0' )]).
但它不起作用,因为返回了两个不同的列表。
如何正确编码? 谢谢。
编辑:
带有'0\t 的示例文件:
0.1 5
3 5
5 8
'0 示例:
0.1 5
3 5
5 8
【问题讨论】:
-
您能否展示一个示例,说明每种不同类型的 CSV 文件中的一行?
-
我已经更新了这个问题。第一个示例使用 TAB 键,第二个示例仅使用空格键。
-
所以你真正想做的是有一个谓词来判断文件是使用空格还是制表符并相应地返回列表?因为您向他们展示的各个
csv_read_file调用在相应的正确文件上工作正常。不幸的是,一旦实例化列表P,就无法重新实例化它。如果您想使其自动运行,您需要添加逻辑来检查文件使用的分隔符。 -
是的,单独的谓词 csv_read_file 工作正常,但我需要创建一个单独的谓词,由我使用的文件独立工作,但我不知道如何。我厌倦了“或”,但给我两个列表 P。
-
正如我所提到的,您要么 (a) 需要提前知道每个文件使用什么分隔符,并为每个文件使用不同的分隔符调用 不同 谓词,或者 (b)您需要编写一些代码来检查文件以查看它有什么分隔符。无论您使用什么分隔符,这两种文件都将成功解析,因为没有分隔符在 CSV 中不被视为错误,而是由表示单个字段的行组成的文件。如果您有任何包含空格但使用制表符分隔符的文件,则几乎无法区分。
标签: csv prolog swi-prolog