使用哈希或关联数组进行Perl文件编写和阅读

时间:2016-01-27 00:58:09

标签: perl hash associative-array

所以我正在做这个家庭作业,我们必须阅读菜单项的文本文件,在这种情况下文本文件读取 - 汉堡包 - 1.79 芝士汉堡 - 2.00 薯条 - 1.50 我需要能够打印出文件中的文本,然后输入输入来改变价格,同时将它们放在关联数组或散列中。老实说,我现在很傻,这就是我所拥有的。我知道>意思是写文件,但我不确定是否应该使用它,因为我想先查看原始文件。

#!/usr/bin/perl
open(FH, "gp1data.txt") || die("Cannot open the file.");
print "$_";
while (<FH>){
    print "$_";
}
my %menu;
while (my $line2 = <$prices>) {
    chomp $line2;
    my @row = split(/-/, $line2);
    $menu{$row[0]} = $row[1];
}

<>;

我在想的是文件被打开然后在文件中输出什么然后我应该能够获取打印的内容并将其放入while循环中,同时将其变为哈希。

我编写了一个关联数组,其中包含文本文件中的内容以尝试在我的代码中使用它到目前为止我没有运气。这是我写的数组。

%x = ("Hamburger" => 1.50, => "Cheeseburger" 2.00, "Fries" => 1.79);
$x[0] = "Hamburger 1.50";
$x[1] = "Cheeseburger 2.00";
$x[2] = "Fries 1.79";
for ($i=0; $i<3; $i++)
{
   $x[$i] =~ /-/;       
   $before = $`;          
   $after  = $';          
   $x{$before} = $after;  
}
foreach $item (keys %x)
{
    print "A $item costs \$$x{$item}\n"
}
<>;

它的作用是打印“ - ”之前和“ - ”之后的内容,这样您就可以看到正在销售的产品和销售量。以下是我给出的确切问题。

“编写一个Perl程序,允许用户从文件中读取一些数据,然后让用户选择修改项目的价格,然后将信息存储回一个可以再次读取的文件后来。“

1 个答案:

答案 0 :(得分:0)

好的,我不想是卑鄙的。我记得我学习perl的日子,并看到了同事的剧本。他说“我花了1/2个小时来写这一行,所以如果你需要1/2小时才能阅读它。”。 Perl可能很难阅读,因此我保持代码简单。

假设这是您的输入文件,例如menu.txt

Hamburgers - 1.79
Cheeseburgers - 2.00
Fries - 1.50

你可以这样读:

use strict;
use warnings;

my %menu;
open(my $input, "<menu.txt" ) || or die "cannot open menu.txt: $!\n";
while( my $line = <$input> ) {
    chomp($line);
    my ($item, $price) = split( / - /, $line );
    $menu{$item} = $price;
} 
close($input);

现在您已经填充了菜单的哈希%menu, 即$menu{'Hamburgers'}1.79,依此类推。

如何更改这些值仍然是一种练习。 ;-)

更改值后,您可以将它们写回(相同或另一个)文件:

open(my $output, ">new-menu.txt" ) || or die "cannot open new-menu.txt: $!\n";
foreach my $item ( keys %menu ) {
    print $output "$item - $menu{$item}\n";
} 
close($output);