我试图弄清楚如何重写我的代码以捕获我的report.txt中的标题并将其添加到其后的每一行,一旦标题更改我希望它捕获新标题并将其放置到每一行之后。我已经包含了一些我正在寻找的样本。我知道我的代码缺少某些东西以获得我的预期输出,这就是我在这里寻求帮助的原因。我是perl的新手,所以请任何帮助或走路都会很棒。
use strict;
use warnings;
open (NEW, ">", "output.txt" ) or die "could not open:$!";
open (FILE, "<", "Report.txt") or die "could not open:$!";
while (<FILE>) {
print NEW if /^\h{3}\d/;
}
close (FILE);
close (NEW);
REPORT.TXT
DATE: 12/14/15
BAR.COMP1
G2,,,,,,,USER LOGS
DEVICE EMULATOR FROM-THRU MINS ROUTINE
G1,,,,,,,USER LOGS
COMPUTER04.1 0726 0808 42 Process Account
Account Name Master Patient Number Account Number
0727 JOHN DOE 1234567899 1234567899
0730 JOHN DOE 1234567899 1234567897
0732 JOHN DOE 1234567899 1234567899
0742 JOHN DOE 1234567899 1234567893
0744 JOHN DOE 1234567899 1234567893
DATE: 12/14/15
BAR.COMP2
G2,,,,,,,USER LOGS
DEVICE EMULATOR FROM-THRU MINS ROUTINE
G1,,,,,,,USER LOGS
COMPUTER04.1 0726 0808 42 Process Account
Account Name Master Patient Number Account Number
0727 JOHN DOE 1234567899 1234567899
0730 JOHN DOE 1234567899 1234567897
0732 JOHN DOE 1234567899 1234567899
0742 JOHN DOE 1234567899 1234567893
0744 JOHN DOE 1234567899 1234567893
预期OUTPUT.TXT
BAR.COMP1 0727 JOHN DOE 1234567899 1234567899
BAR.COMP1 0730 JOHN DOE 1234567899 1234567897
BAR.COMP1 0732 JOHN DOE 1234567899 1234567899
BAR.COMP1 0742 JOHN DOE 1234567899 1234567893
BAR.COMP1 0744 JOHN DOE 1234567899 1234567893
BAR.COMP2 0727 JOHN DOE 1234567899 1234567899
BAR.COMP2 0730 JOHN DOE 1234567899 1234567897
BAR.COMP2 0732 JOHN DOE 1234567899 1234567899
BAR.COMP2 0742 JOHN DOE 1234567899 1234567893
BAR.COMP2 0744 JOHN DOE 1234567899 1234567893
答案 0 :(得分:1)
你快到了。要捕获标头,首先要创建一个变量 坚持下去:
$event->getRequest()->getSession()->setParameter('account_number', $account->getAccountNumber());
现在,在你的循环中,你需要确定什么是标题行和 保存。最后一个更改是在常规行之前打印标题,所以 这是一个重构的代码形式,包含以下内容:
my $header;
这将自动进行。如果该行是标题,它将保存。如果它 是一个常规行,它将打印当前标题加上该行。
答案 1 :(得分:0)
我已经对此进行了很多猜想,因为我不知道你文件的具体内容......例如,我看到前导空格可能只是你粘贴数据的方式。此外,是固定宽度还是制表符分隔?
无论如何,这并不优雅,但它可能会让你朝着这个方向前进。
use strict;
use warnings;
open my $NEW, ">", "c:/cdh/output.txt" or die "could not open:$!";
open my $FILE, "<", "c:/cdh/Report.txt" or die "could not open:$!";
my $file;
my $line_status = 0;
while (<$FILE>) {
if (/^\s*DATE:/) {
$line_status = 1;
next;
} elsif (/^\s+Account Name/) {
$line_status = 2;
next;
}
if ($line_status == 1) {
chomp;
tr/ //d;
$file = $_;
$line_status = 0;
next;
} elsif ($line_status == 2) {
if (/\w/) {
print $NEW "$file\t$_";
} else {
$line_status = 0;
}
}
}
close $FILE;
close $NEW;