我尝试解析一个csv文件并从每一行中提取特定的列数据,我设法将文件解析为记录列表,但是我无法遍历每个记录的字段。 他们是否可以使用序言来解析csv文件,以便csv文件的每个记录本身都是一个列表?

我的代码:

:- use_module(library(csv)).

% main function ,  first parse the file then extracts max total market  
get_rows_data(File,Rows) :-
   csv_read_file(File, Rows, [functor(record), arity(18)]),
   maplist(assert, Rows),
   get_row(Rows).

get_row([]).    
get_row([Head|Tail]) :-
   write('*********************************'),write(Head),
   get_row(Tail). 

===============>>#1 票数:1 已采纳

我会说你快到了。 您只需要将记录词转换为列表。

:- use_module(library(apply)).
:- use_module(library(csv)).

get_rows_data(File, Lists):-
  csv_read_file(File, Rows, []),
  rows_to_lists(Rows, Lists).

rows_to_lists(Rows, Lists):-
  maplist(row_to_list, Rows, Lists).

row_to_list(Row, List):-
  Row =.. [row|List].

  ask by user2512231 translate from so

未解决问题?本站智能推荐:

1回复

通过swi-prolog代码将数据写入CSV文件

如何从下面的序言代码将数据写入CSV文件? 谢谢, SB
1回复

导入csv文件数据以填充Prolog知识库

我有一个csv文件example.csv ,它包含两个标题为var1和var2的列。 我想用重复的事实填充一个最初空的Prolog知识库文件import.pl ,而example.csv每一行都被视为相同: 如何在SWI-Prolog中编写代码? 编辑,根据@Shevlia
1回复

Prolog,使用不同的分隔符从CSV读取数据

我需要在序言中读取其他CSV文件,某些行的格式为0'\\t ,其他文件的格式为空格0' 。 我用了: 但这行不通,因为还给我两个不同的清单。 如何正确编码? 谢谢。 编辑:带有'0\\t示例文件: 例如'0 :
1回复

使用Prolog解析数值数据?

我是prolog的新手,正在考虑将其用于小型数据分析应用程序。 这是我要完成的工作: 我有一个CSV文件,其中包含以下数据: 数据是纯数字的,我需要执行以下操作:首先,我需要根据以下方案对行进行分组: 那上面是怎么回事? 我从第一行开始,第一行的值为“ a”。 然
2回复

Prolog-如何在pl文件中使用多个pl文件

我是Prolog的新手。 我有两个文件。 其中一个是“ names.pl”,另一个是“ verbs.pl”。 这两个文件都有事实。 “ names.pl”具有许多名词等事实。事实的名称是关联。 这些文件的模板:related(notion_1,relation,notion_2)示
3回复

Prolog-特别是SWI-pl在哪里?

我正在尝试使用interprolog和SWI prolog设置环境,interprolog需要swi的“ pl”的位置,但我找不到它。 我所能找到的只是swipl或plrc,都无法与interprolog一起使用。 如果我在终端输入pl(这应该运行swi-prolog),它说 但是如
1回复

Prolog-聚合:提取除最小值以外的其他变量

我想知道在执行此操作时是否可以提取X值: 模拟谓词用于P和Color作为输入,使用V和X作为输出。 目前,这很好地获得了V的最小值,但是我真正想要的是在V处于最小值时获得X的值。 有没有办法做到这一点 ? 关于我应该如何进行的任何想法?
4回复

Prolog - 带有文件输入的DCG解析器

作为项目的一部分,我需要编写一个解析器,它可以读取文件并解析我可以在程序中使用的事实。 文件结构如下所示: 我最终想要的是: 我这样读了我的文件: 现在我已经阅读了几本书和网上关于DCG的内容,但他们都解释了相同的简单例子,你可以生成句子,如“猫吃蝙蝠”等.....
1回复

Prolog-将列表变成事实列表

我使用以下命令在Python中启动SWI-prolog: 启动的脚本是一个计划器: 我需要在以下列表中解析输入参数“ cbbaa table”:“ [on(c,b),on(b,a),on(a,table)] ”,以便从规则中执行do (例如do([on(c,b),on(b,a),
1回复

用序言解析

我正在尝试用序言进行解析: 我需要运行一个接收命令中文本的代码,并根据输入来解析它。 命令cal返回日历(月,年) ,其中月份∈[1-12]和年份∈[1-9999]。 如果没有给出月份,则返回年份;如果未指定月份,则返回当前月份和年份。 例。 选项1 选项2