@How 在 Perl 中拆分时将字符串转换为整数
@How to convert strings to integers on a split in Perl
我一次读取一个数据文件中的行,将它们拆分为 : 并尝试将数组中的两个特定值存储到散列中。
foreach $a (<INPUT>)
{
@list = split (':', $a);
$UIDH{$list[2]} = $list[5];
然后我尝试比较存储在散列中的值。
if (($list[2]) < 500 && > 0);
{
print "System type account\n";
}
这就是我正在使用的。我的结论是散列中的值是一个字符串,因此比较不起作用。下面是我在程序中出现的代码。
open (INPUT, "<info.old") || die "Cannot open file : $!";
open (OUTPUT, ">out.txt") || die "Cannot open file : $!";
%UIDH;
foreach $a (<INPUT>)
{
@list = split (':', $a);
$UIDH{$list[2]} = $list[6];
if (($list[2]) >= 500)
{
print STDOUT "R\n";
}
if (($list[2]) < 500 && > 0);
{
print STDOUT "S\n";
}
if (($list[2]) == 0)
{
print STDOUT "SU\n";
}
}
最后,这是我正在处理的数据示例
apache:x:48:48:Apache:/var/www:/sbin/nologin
msmith:x:501:501::/home/msmith:/bin/bash
Sjones:x:502:502::/home/sjones:/bin/bash
sdonle:x:503:503::/home/sdavis:/bin/sh
scrosby:x:504:504::/home/scrosby:/bin/bash
borr:x:0:0::/home/borr:/bin/sh
我不知道为什么你声称比较不起作用,因为你的代码甚至没有编译,所以你从来没有评估过它。
if (($list[2]) < 500 && > 0); { ... }
应该是
if (($list[2]) < 500 && $list[2] > 0) { ... }
两个错误:
>
是二元运算符;需要用在两个表达式之间进行比较。
if
语句的格式是 if (EXPR) BLOCK
,但你有 if (EXPR); BLOCK
.
修复这些错误后,您的代码将输出以下内容:
S
R
R
R
R
SU
这似乎是预期的结果,但您没有说明您的预期。
注意:如果您的代码 reviewed.
会让您受益匪浅
为了使您的代码更具可读性和更易于维护,您应该为变量使用有意义的名称。
@list = split (':', $a);
my $account_number = $list[2];
my $account_uidh = $list[5];
我一次读取一个数据文件中的行,将它们拆分为 : 并尝试将数组中的两个特定值存储到散列中。
foreach $a (<INPUT>)
{
@list = split (':', $a);
$UIDH{$list[2]} = $list[5];
然后我尝试比较存储在散列中的值。
if (($list[2]) < 500 && > 0);
{
print "System type account\n";
}
这就是我正在使用的。我的结论是散列中的值是一个字符串,因此比较不起作用。下面是我在程序中出现的代码。
open (INPUT, "<info.old") || die "Cannot open file : $!";
open (OUTPUT, ">out.txt") || die "Cannot open file : $!";
%UIDH;
foreach $a (<INPUT>)
{
@list = split (':', $a);
$UIDH{$list[2]} = $list[6];
if (($list[2]) >= 500)
{
print STDOUT "R\n";
}
if (($list[2]) < 500 && > 0);
{
print STDOUT "S\n";
}
if (($list[2]) == 0)
{
print STDOUT "SU\n";
}
}
最后,这是我正在处理的数据示例
apache:x:48:48:Apache:/var/www:/sbin/nologin
msmith:x:501:501::/home/msmith:/bin/bash
Sjones:x:502:502::/home/sjones:/bin/bash
sdonle:x:503:503::/home/sdavis:/bin/sh
scrosby:x:504:504::/home/scrosby:/bin/bash
borr:x:0:0::/home/borr:/bin/sh
我不知道为什么你声称比较不起作用,因为你的代码甚至没有编译,所以你从来没有评估过它。
if (($list[2]) < 500 && > 0); { ... }
应该是
if (($list[2]) < 500 && $list[2] > 0) { ... }
两个错误:
>
是二元运算符;需要用在两个表达式之间进行比较。if
语句的格式是if (EXPR) BLOCK
,但你有if (EXPR); BLOCK
.
修复这些错误后,您的代码将输出以下内容:
S
R
R
R
R
SU
这似乎是预期的结果,但您没有说明您的预期。
注意:如果您的代码 reviewed.
会让您受益匪浅为了使您的代码更具可读性和更易于维护,您应该为变量使用有意义的名称。
@list = split (':', $a);
my $account_number = $list[2];
my $account_uidh = $list[5];