perl脚本在perl中只向输出文件写入一行
我编写了一个脚本,在web上打开一个文件,并在名称中使用wireless拉出所有行。它将输出写入另一个文件,但只记录输出文件中的一行,应该是多行perl脚本在perl中只向输出文件写入一行,perl,Perl,我编写了一个脚本,在web上打开一个文件,并在名称中使用wireless拉出所有行。它将输出写入另一个文件,但只记录输出文件中的一行,应该是多行 #!\Perl64\eg\perl -w use warnings; use strict; use LWP::Simple; my $save = "C:\\wireless\\"; my $file = get 'http://dhcp_server.test.com/cgi-bin/dhcp_utilization_csv_region.pl
#!\Perl64\eg\perl -w
use warnings;
use strict;
use LWP::Simple;
my $save = "C:\\wireless\\";
my $file = get 'http://dhcp_server.test.com/cgi-bin/dhcp_utilization_csv_region.pl?region=test';
open( FILE, '>', $save . 'DHCP_Utilization_test.csv' ) or die $!;
binmode FILE;
print FILE $file;
close(FILE);
open( F, "C:\\wireless\\DHCP_Utilization_test.csv" ) || die "can't opern file: $!";
my @file = <F>;
close(F);
my $line;
foreach $line (@file) {
chomp $line;
if ( $line =~ m/Wireless /g ) {
my ($ip, $rtr, $mask, $zip, $blc, $address, $city,
$state, $space, $country, $space2, $noc, $company, $extra,
$active, $used, $percent, $extra3, $nus, $construct
) = split( /,/, $line );
my $custom_directory = "C:\\wireless\\";
my $custom_filename = "wireless_DHCP.csv";
my $data = "$ip $mask $rtr $active $used $percent $nus $construct";
my $path = "$custom_directory\\$custom_filename";
open( my $handle, ">>", $path ) || die "can't open $path: $!";
binmode($handle); # for raw; else set the encoding
print $handle "$data\n";
close($handle) || die "can't close $path: $!";
}
}
#\Perl64\eg\perl-w
使用警告;
严格使用;
使用LWP::Simple;
my$save=“C:\\wireless\\”;
我的$file=get'http://dhcp_server.test.com/cgi-bin/dhcp_utilization_csv_region.pl?region=test';
打开(文件'>',$save.'DHCP\u usilization\u test.csv')或死亡$!;
二进制文件;
打印文件$FILE;
关闭(文件);
打开(F,“C:\\wireless\\DHCP_-Utilization_-test.csv”)| | die“无法操作文件:$!”;
my@file=;
关闭(F);
我的美元线;
foreach$行(@file){
chomp$行;
如果($line=~m/Wireless/g){
我的($ip、$rtr、$mask、$zip、$blc、$address、$city、,
$state、$space、$country、$space2、$noc、$company、$extra、,
$active、$used、$percent、$extra3、$nus、$construct
)=拆分(/,/,$行);
my$custom_directory=“C:\\wireless\\”;
my$custom_filename=“wireless_DHCP.csv”;
my$data=“$ip$mask$rtr$active$used$percent$nus$construct”;
my$path=“$custom\u目录\\$custom\u文件名”;
打开(我的$handle,“>>”,$path)| | die“无法打开$path:$!”;
binmode($handle);#用于原始;否则设置编码
打印$handle“$data\n”;
关闭($handle)| die“无法关闭$path:$!”;
}
}
我认为问题是因为您在Windows上,但使用:raw
保存文件,然后使用:crlf
重新打开文件
open( FILE, '>', $save . 'DHCP_Utilization_test.csv' ) or die $!;
binmode FILE;
print FILE $file;
close(FILE);
open( F, "C:\\wireless\\DHCP_Utilization_test.csv" ) || die "can't opern file: $!";
my @file = <F>;
close(F);
我相信问题是因为您在Windows上,但使用
:raw
保存文件,然后使用:crlf
重新打开文件
open( FILE, '>', $save . 'DHCP_Utilization_test.csv' ) or die $!;
binmode FILE;
print FILE $file;
close(FILE);
open( F, "C:\\wireless\\DHCP_Utilization_test.csv" ) || die "can't opern file: $!";
my @file = <F>;
close(F);
不要用
foreach
迭代文件-您正在将整个过程读入内存来执行此操作。最好使用while(my$line=
。另外:为什么每次迭代都要打开/关闭文件?@Sobrique,我不担心,他已经用lwp get将整个文件存储在内存中,两次应该不会有问题;)同一模块中的getstore
函数将阻止文件进入内存。@RMax,您的代码似乎不必要地复杂,可能会减少到几行。你到底想实现什么?@TLP,除非有特殊需要保存原始CSV,不需要存储中间文件:但是在这种情况下,我怀疑一切都可以通过print join map grep split get实现
不要用foreach
迭代一个文件-您正在将整个过程读入内存来完成。最好使用while(my$line=
。另外:为什么每次迭代都要打开/关闭文件?@Sobrique,我不担心,他已经用lwp get将整个文件存储在内存中,两次应该不会有问题;)同一模块中的getstore
函数将阻止文件进入内存。@RMax,您的代码似乎不必要地复杂,可能会减少到几行。您到底想实现什么?@TLP,除非有保存原始CSV的特殊需要,否则不需要存储中间文件:但是在这种情况下,我怀疑一切都可以通过print join map grep split get