【问题标题】:Perl File Writing and Reading using Hashes or Associative Arrays使用散列或关联数组写入和读取 Perl 文件
【发布时间】:2016-01-27 00:58:09
【问题描述】:

所以我正在做这个家庭作业,我们必须阅读菜单项的文本文件,在这种情况下,文本文件读取 - 汉堡包 - 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 程序,允许用户从文件中读取一些数据,然后给用户修改商品价格的选项,然后将信息存储回可以再次读取的文件中稍后。”

【问题讨论】:

  • 您的具体问题是什么?看起来您正在为输入、输出以及介于两者之间的所有内容而苦苦挣扎。如果没有为您完成整个作业,我该如何提供帮助?
  • "编写一个 Perl 程序,允许用户从文件中读取一些数据,然后为用户提供修改商品价格的选项,然后将信息存储回文件以后可以再读。"
  • 再说一次,我不会为你做所有的事情,那么具体来说,你需要什么帮助?
  • 我的问题是我觉得我有这些部件,但我没有把它们正确地放在一起,比如我如何在文件打印后获取输入。我需要输入来更改打开的列表。
  • 你可以使用Storable,它是首次与 perl v5.7.3 一起发布的,你需要'store'和'retrieve'。描述顶部有一个使用它们的示例。

标签: perl hash associative-array


【解决方案1】:

好的,我不想刻薄。我记得我学习 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);

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多