你不会找到一个工具,它可以简单地接受任意输入,猜测你想要从中得到什么数据,并产生你想要的输出。对我来说,这听起来像是强大的人工智能。
制作这样的东西,即使只是为了识别数字,也会变得非常棘手。例如“123.456”是一个数字还是两个?这个“123,456”怎么样?“35F”是十进制数字和“F”还是十六进制值0x35F?您将不得不构建一些能够以您需要的方式解析的东西。您可以使用正则表达式来执行此操作,也可以使用 来执行此操作sscanf
,或者您可以通过其他方式执行此操作,但是您将不得不编写一些自定义的东西。
但是,使用基本的正则表达式,您可以自己执行此操作。这不会是魔法,但它不是那么多的工作。像这样的东西会解析你感兴趣的行并将它们合并(Perl):
my @vals = ();
while (defined(my $line = <>))
{
if ($line =~ /The temperature at P(\d*) is (\d*)F./)
{
push(@vals, "($1,$2)");
}
}
print "The temperature at P%d is %dF. {";
for (my $i = 0; $i < @vals; $i++)
{
print $vals[$i];
if ($i < @vals - 1)
{
print ",";
}
}
print "}\n";
这个的输出是L
The temperature at P%d is %dF. {(1,35),(1,40),(3,35),(1,40)}
您可以为需要解析的每种类型的行做类似的事情。您甚至可以从文件中读取这些正则表达式,而不是对每个正则表达式进行自定义编码。