一起更新了文件串字

时间:2017-05-05 03:59:50

标签: arrays perl file append

我的脚本有效,除非我附加文件:它将我的单词串成一个字符串,如下所示:

Joe Smo45MaleSingle

最初,在文本文件中,它们位于列中。我希望附加的文件保留在列中。

#!/usr/bin/perl

use strict;
use warnings;
use File::Slurp;

my @array1 = ("Full Name:", "Age:", "Gender:", "Marital Status:");
my @array2 = read_file("empdata.txt", chomp => 1);

print "$array1[0]        $array2[0]\n";
print "$array1[1]              $array2[1]\n";
print "$array1[2]           $array2[2]\n";
print "$array1[3]   $array2[3]\n";

print "Do you want to change the age? (y or n) :";
chomp(my $answer = <STDIN>);
if ($answer eq "y") {
print "What is the new age? :";
chomp(my $age = <STDIN>);
$array2[1] = $age;
write_file("empdata.txt",@array2);

print "Do you want to change marital status? (y or n) :";
chomp(my $answer = <STDIN>);
 if ($answer eq "y") {
    print "What is the new marital status? :";
    chomp(my $status = <STDIN>);
    $array2[3] = $status;
    write_file("empdata.txt",@array2);
}  
} else { 
 print "Do you want to change marital status? (y or n) :";
 chomp(my $answer = <STDIN>);
 if ($answer eq "y") {
    print "What is the new marital status? :";
    chomp(my $status = <STDIN>);  
    $array2[3] = $status;
    write_file("empdata.txt",@array2);
}       
}

close || die "could not close file";

1 个答案:

答案 0 :(得分:1)

我猜,因为你没有向我们展示你的输入数据。但我认为你说你的输入文件是这样的:

Joe Smo
45
Male
Single

并且,在运行程序之后,您最终得到了这个:

Joe Smo45MaleSingle

当您阅读该文件时,您使用chomp => 1选项read_file()。这将从文件中的行末尾删除换行符。但write_file()没有unchomp选项来替换换行符。

最快,最脏,修复是停止删除换行符。您需要从chomp => 1中移除read_file()选项,并在阅读新chomp()值时停止调用$status。您还可以删除“\ {1}} n“从您打印原始记录的行(因为它们将附加换行符)。

但是,我提醒您不要使用File :: Slurp。它有一些UTF8数据的问题,可能会在将来烧毁你。我建议使用Path::Tiny(其中包含slurp()spew()方法)。

但是,实际上,看起来你正在编写一个数据库。那么为什么不使用数据库?