0

我需要从有事实描述的文件中读取,例如:

id: GO:0000008
name: thioredoxin

我需要用它建立一个事实,比如:"gene(0000008,thioredoxin)."

---已添加--- 您好,我一直在搜索信息,我找到了 DCG 子句,显然 DCG 解决了问题,但我没有找到详细的示例。

4

2 回答 2

1

这里是一个示例,使用 SWI-Prolog 帮助程序库

:- [library(dcg/basics)].

read_fact(Fact) -->
    "id:", blanks, "GO:", string(DIGITS), "\n", "name:", blanks, string(NAME),
    {atom_codes(A_DIGITS, DIGITS),
     atom_codes(A_NAME, NAME),
     Fact =.. [gene, A_DIGITS, A_NAME]
    }.

产量

?- phrase(read_fact(F), "id: GO:0000008\nname: thioredoxin").
F = gene('0000008', thioredoxin) .

如您所见,DCG 可以方便地测试内联字符串,但是要处理文件,则可以使用来自 library( pure_input ) 的phrase_from_file。此外,浏览库(dcg/basics)以了解许多有用的“扫描仪”,如空白//0 或字符串//1。

于 2013-05-01T20:15:48.750 回答
0

您可以在 perl/python/php 或类似文件中使用非常小的脚本,将格式更改为您喜欢的格式

例如在 perl

我的($id)='';

而(<>){

if($id ''){

m/name:\s(\w+)$/;

print "gene( id, $1 ).\n";

$id = '';

}

别的{

if( m/id:.*(\d+)/){ $id = $1; }

}

}

于 2013-05-03T12:11:00.737 回答