我闻到了一些不好的东西?
if ($col == 24) {
$buffer{'Y'} = trim($val);
return;
}
if ($col == 25) {
$buffer{'Z'} = trim($val);
return;
}
if ($col == 26) {
$buffer{'AA'} = trim($val);
return;
}
if ($col == 27) {
$buffer{'AB'} = trim($val);
return;
}
Tan*_*lus 14
这些名字看起来也很可疑.如果您循环遍历列,请尝试使用magic ++运算符.
my $colname = 'A';
for (0..$#cols)
{
# do stuff with $colname
$buffer{$colname} = trim($val);
++$colname;
}
Run Code Online (Sandbox Code Playgroud)
如果没有,这里似乎有一个模式可以用来将数字从十进制(数字)转换为字母.你可以像将数字转换为十进制一样,除了你使用字符AZ,基数26,而不是0-9,基数10.类似于:
sub colname
{
my $num = shift;
my $name = '';
while ($num)
{
$name .= chr(ord('A') + $num % 26);
$num /= 26;
}
reverse $name;
}
Run Code Online (Sandbox Code Playgroud)
(未经测试)此算法与语言无关.它没有特别利用perlishness,但作为一般案例非常有效.
更新:我告诉过你这是未经测试的.j_random_hacker指出了思考,我已经纠正过了.谢谢!
Geo*_*ips 12
关联数组在这些情况下运行良好.首先初始化:
my %colToBuffer = ( 24 => 'Y', 25 => 'Z', 26 => 'AA', 27 => 'AB');
Run Code Online (Sandbox Code Playgroud)
然后代码可以是:
if (exists $colToBuffer{$col})
{
$buffer{$colToBuffer{$col}} = trim($val);
}
Run Code Online (Sandbox Code Playgroud)
品尝季节.
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |