【发布时间】:2011-06-04 16:33:36
【问题描述】:
在以下几行中,如何使用 REGEX PERL 将“Description:”和“Tag:”之间的行存储在变量中,什么是好的数据类型使用,字符串或列表或其他什么?
(我正在尝试用 Perl 编写一个程序,以提取带有 Debian 软件包信息的文本文件的信息并将其转换为 RDF(OWL)文件(本体)。)
描述: 用于解码 ATSC A/52 流的库(开发) liba52 是用于解码 ATSC A/52 流的免费库。 A/52 标准是 用于各种应用,包括数字电视和 DVD。这是 也称为 AC-3。
此包包含开发文件。 主页:http://liba52.sourceforge.net/
标签: devel::library, role::devel-lib
目前我写的代码是:
#!/usr/bin/perl
open(DEB,"Packages");
open(ONT,">>debianmodelling.txt");
$i=0;
while(my $line = <DEB>)
{
if($line =~ /Package/)
{
$line =~ s/Package: //;
print ONT ' <package rdf:ID="instance'.$i.'">';
print ONT ' <name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</name>'."\n";
}
elsif($line =~ /Priority/)
{
$line =~ s/Priority: //;
print ONT ' <priority rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</priority>'."\n";
}
elsif($line =~ /Section/)
{
$line =~ s/Section: //;
print ONT ' <Section rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</Section>'."\n";
}
elsif($line =~ /Maintainer/)
{
$line =~ s/Maintainer: //;
print ONT ' <maintainer rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</maintainer>'."\n";
}
elsif($line =~ /Architecture/)
{
$line =~ s/Architecture: //;
print ONT ' <architecture rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</architecture>'."\n";
}
elsif($line =~ /Version/)
{
$line =~ s/Version: //;
print ONT ' <version rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</version>'."\n";
}
elsif($line =~ /Provides/)
{
$line =~ s/Provides: //;
print ONT ' <provides rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</provides>'."\n";
}
elsif($line =~ /Depends/)
{
$line =~ s/Depends: //;
print ONT ' <depends rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</depends>'."\n";
}
elsif($line =~ /Suggests/)
{
$line =~ s/Suggests: //;
print ONT ' <suggests rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</suggests>'."\n";
}
elsif($line =~ /Description/)
{
$line =~ s/Description: //;
print ONT ' <Description rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</Description>'."\n";
}
elsif($line =~ /Tag/)
{
$line =~ s/Tag: //;
print ONT ' <Tag rdf:datatype="http://www.w3.org/2001/XMLSchema#string">'.$line.'</Tag>'."\n";
print ONT ' </Package>'."\n\n";
}
$i=$i+1;
}
【问题讨论】:
-
由于选择最佳数据类型完全取决于您对数据的预期用途,因此您需要对您的目标进行一些解释。
-
@Rob Raisch:我很抱歉没有把问题放在开头。这样可以吗?
-
@Rob 我只需要存储在变量中即可将其复制到文件中。
-
好的,刚发现,其实我一直在问关于大项目启动的问题,所以短时间内测试所有答案并不容易。