【发布时间】:2017-10-27 00:17:11
【问题描述】:
我正在通过 ActivePerl 运行以下 Perl 脚本以从文本中提取时间和 ID 数值。 出于某种原因,while 循环在检查文本的第一行后结束。
这是我使用的 Perl 代码:
#!/usr/bin/perl -w
$inputfile = "nr_raw.txt";
$outputfile = "results.txt"; #create this output file (it will be created automatically in the current folder)
open (OUTPUTFILEHANDLE, "> $outputfile") || die "I can't find or open $file: error $!\n";
open (INPUTFILEHANDLE, $inputfile) || die "I can't find or open $file!\n";
$_=<INPUTFILEHANDLE>;
while (/{.*?"timestamp":(\d+).*?"accountId":(\d+).*?}\n/sg)
{
$info="timestamp: $1 accountID: $2";
print "$info \n";
print OUTPUTFILEHANDLE $info ;
}
close OUTPUTFILEHANDLE;
nr_raw.txt:(第三行没有accountId条目)
{"eventType":"alarm","timestamp":1508845227478,...,"accountId":1275676,"Version":"1.3",....}
{"eventType":"alarm","timestamp":1508845166740,...,"accountId":1274721,"Version":"1.1",....}
{"eventType":"alarm","timestamp":1508845187479,....,..................,"Version":"1.1",....}
{"eventType":"alarm","timestamp":1508845166980,...,"accountId":1347376,"Version":"1.2",....}
results.txt:(没有别的)
timestamp 1508845227478 account ID1275676
【问题讨论】:
-
perl 5.0 发布已经23年了。您现在可以
use strict;和use warnings;。 -
您的代码只从文件中读取一行。
-
$_=
; # 只读取文件的第一行 -
有道理,谢谢你的澄清。我在其他文本文件上使用了类似的脚本,但在这种情况下它可能起作用,因为整个文本可能是一行(没有 LF/CR)