值未存储在文件中<;Perl>;
我是perl新手。我的动机是从txt文件中读取一些值,并在perl脚本中使用它 文本文件如下所示:值未存储在文件中<;Perl>;,perl,Perl,我是perl新手。我的动机是从txt文件中读取一些值,并在perl脚本中使用它 文本文件如下所示: Servers :: (local) Tomas-Server1 Tomas-Server2 .........** 我需要做的是获取第三行值(Tomas-Server2)并在perl脚本中使用它。基本上是调用perl脚本的第三个值 我已经为它编写了一个基本代码: my($ServName1,$ServName,$Serv
Servers ::
(local)
Tomas-Server1
Tomas-Server2
.........**
我需要做的是获取第三行值(Tomas-Server2)并在perl脚本中使用它。基本上是调用perl脚本的第三个值
我已经为它编写了一个基本代码:
my($ServName1,$ServName,$ServName3) = getservername($servername);
my ($filenam) = 'data.txt';
my @Param = ();
open(INFILE,"<$filenam") or die "Couldn't open $filenam for reading\n";
while(<INFILE>) {
chop($_);
push(@Param,$_);
}
close(INFILE);
return @Param;
}
my($ServName1,$ServName,$ServName3)=getservername($servername);
my($filenam)='data.txt';
我的@Param=();
open(infle),“您从未定义过$ServName2
变量。$ServName1
和$ServName3
之间的变量名为$ServName
,没有编号。示例数据有一些问题,但我想我理解您的意图。假设您想要第三个服务器值(不仅仅是第3行)您可能希望代码看起来像这样
#!perl
#some includes
use strict;
use warnings;
use Data::Dumper;
#set some vars
my $TargetFileName="data_file.txt";
my $TargetServerNumber=3;
#call the sub
my @ServerArray=GetServerName($TargetFileName);
#did we get anything back?
if(@ServerArray) {
#yep, we got some content
print "Server number ".$TargetServerNumber."/".($#ServerArray+1)." is \"".$ServerArray[$TargetServerNumber-1]."\"\n"; #array numbers are 0-based
} else {
#nope, we read the file but didn't any matching content
print "No servers found in file \"".$TargetFileName."\".\n";
} #end if
print "\n";
print "Here's what was loaded into \@ServerArray...\n";
print Data::Dumper::Dumper(@ServerArray); #so you can see the full content of @ServerArray
print "All Done\n";
exit;
#----- subs go here -----
sub GetServerName {
my $DataFileName=shift; #pull in the first arg - this alters @_ for the rest of the sub, so take care when doing this
my @ReturnArray;
#do some QA
if(!$DataFileName) {die "You need to provide a file name to use this sub.\n"} #do we have a file name?
if(!stat($DataFileName)) {die "The requested file name of \"".$DataFileName."\" does not exist.\n";} #does the file exist?
open(INFILE, "<".$DataFileName) or die "Unable to open \"".$DataFileName."\" - ".$!;
#ok, read the file content
while(my $Line=<INFILE>) {
chop($Line);
$Line=~s/^\s+//g; #remove leading white spaces
$Line=~s/\s+$//g; #remove trailing white spaces
if(!$Line) {next;} #blank line, skip it
#check for the headers
if($Line=~m/^Servers/) {next;} #skip lines beginning with "Servers"
if($Line=~m/^\(local\)/) {next;} #skip lines beginning with "(local)"
#if we get here, we must want the line content, so add it to the array
push(@ReturnArray, $Line);
} #end while
close(INFILE);
#send the array data back, if any
return @ReturnArray
} #end GetServerName sub
__END__
stuff below here does not need to be commented
Servers ::
(local)
Tomas-Server1
Tomas-Server2
Tomas-Server3
Tomas-Server4
Tomas-Server5
Tomas-ServerLast
我想你忘了在第一行后面的某个地方加一个sub-getservername{
行,在my@Param=();
之前。那不是第三行。那是第七行。这些信息真的有必要吗?你似乎不是在问如何解析文件。你应该在所有文件的顶部加上use strict;
。