Tôi đang cố gắng viết một tập lệnh perl sẽ đọc một dòng tệp, so sánh chuỗi con cụ thể của từng dòng với dòng của dòng đã đọc trước đó và nếu khác, hãy ghi nó vào tệp mới . Trong thực tế, kịch bản loại bỏ các dòng không duy nhất giữa các dòng tuần tự của một tệp.Lỗi không mong muốn của logic
Các kịch bản dường như bị mắc một lỗi logic, như thay vì nhận được dòng duy nhất trong tập tin đầu ra, tôi chỉ nhận được dòng chấm dứt.
use strict;
my $src='/var/www/pinginfo/ugvps';
my $tar="target";
open(INP, $src) or die("Could not open: $!.");
open(OUTP, ">", $tar) or die "Couldn't open: $!";
my $lastrd="";
while(my $line = <INP>) {
if (&IsSame($lastrd, $line)) {
print "Unique line: ".$line."\n";
print OUTP $line;
$lastrd=$line;
} else {
print "Line was the same: ".$line."\n";
}
}
print OUTP "Done";
close (OUTP);
close (INP);
exit 0;
sub IsSame {
my $old=$_[0];
my $new=$_[1];
if ($old == "") {
return 0;
}
my @values_old = split('\|',$old);
my @values_new = split('\|',$new);
if ($values_old[3] eq $values_new[3]) {
#True - they are the same
return 1;
} else {
#False
return 0;
}
}
Tệp 'đích' sau khi thực thi, chứa một dòng Done
.
tập tin nguồn của tôi trông như thế này:
UGVPS|6.6.6.6|03-08-2013 10:16:21 PM|0
UGVPS|6.6.6.6|03-08-2013 11:06:01 PM|0
UGVPS|6.6.6.6|03-08-2013 11:08:01 PM|100
UGVPS|6.6.6.6|03-08-2013 11:10:01 PM|0
UGVPS|6.6.6.6|03-08-2013 11:14:01 PM|100
UGVPS|6.6.6.6|03-08-2013 11:16:01 PM|0
UGVPS|6.6.6.6|03-08-2013 11:52:02 PM|0
UGVPS|6.6.6.6|03-08-2013 11:54:01 PM|100
UGVPS|6.6.6.6|03-08-2013 11:56:01 PM|100
UGVPS|6.6.6.6|03-08-2013 11:58:01 PM|100
UGVPS|6.6.6.6|04-08-2013 12:00:01 AM|0
UGVPS|6.6.6.6|04-08-2013 12:02:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:04:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:06:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:08:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:10:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:12:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:14:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:16:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:18:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:20:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:22:01 AM|100
UGVPS|6.6.6.6|04-08-2013 12:24:01 AM|0
UGVPS|6.6.6.6|04-08-2013 02:38:01 AM|0
Tất cả các dòng khác nhau. Một lỗi lớn tôi có thể thấy (có thể có nhiều hơn) là so sánh bằng toán tử số ('! ='). 'Perl' sử dụng' ne' cho nó. – Birei
Tôi đã sửa chữa toán tử. Thật không may là lỗi vẫn còn. – Droidzone
'if ($ old ==" ")' cũng là một so sánh số và như một chuỗi rỗng ('" "') là sai quá bạn chỉ có thể nói 'if ($ cũ)' – marderh