Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl文件I/O问题:脚本擦除所有文件内容,而不仅仅是删除数字。_Perl - Fatal编程技术网

Perl文件I/O问题:脚本擦除所有文件内容,而不仅仅是删除数字。

Perl文件I/O问题:脚本擦除所有文件内容,而不仅仅是删除数字。,perl,Perl,我一直试图让这个Perl脚本删除文件中的数字行,但遇到了一些问题。我是一个Perl noob,我只在这一个家庭作业中使用它。不过,我做了很多研究,这段代码似乎应该可以工作,但不是从包含数字的文本文件中删除数字 01现在是 02时间 03删除 04号 我的脚本只是删除整个文件内容。有人能告诉我我的逻辑或语法有什么问题吗,或者不管是什么问题 #!/usr/bin/perl open my $in, '<', "rmv_num_lines.txt" or die "

我一直试图让这个Perl脚本删除文件中的数字行,但遇到了一些问题。我是一个Perl noob,我只在这一个家庭作业中使用它。不过,我做了很多研究,这段代码似乎应该可以工作,但不是从包含数字的文本文件中删除数字

01现在是

02时间

03删除

04号

我的脚本只是删除整个文件内容。有人能告诉我我的逻辑或语法有什么问题吗,或者不管是什么问题

#!/usr/bin/perl

open my $in, '<', "rmv_num_lines.txt" or die "Can't read from file.\n"; # open for reading

@array = <in>; # fill array with contents of file

open my $out, '>', "rmv_num_lines.txt" or die "Can't write to file.\n"; # open for writing

while( <$in> ){
        foreach $item(@array){
                if($item =~ /\d/){ # if line contains a digit
                        $item =~ s/\d/\n/; # erase digit, I think?
}
}
        print $out $_;  # print edited array into file
}

close $out;
#/usr/bin/perl
以“
  • 您使用了
    @array=
    而不是
    @array=
    
  • 当您实际尝试使用
    while()
    读取该文件时,它已被
    open'>'
    破坏
  • s/\d/\n/
    不只是删除一个数字;它在其位置添加了一个换行符

  • 您使用了
    @array=
    而不是
    @array=
    
  • 当您实际尝试使用
    while()
    读取该文件时,它已被
    open'>'
    破坏
  • s/\d/\n/
    不只是删除一个数字;它在其位置添加了一个换行符


你能试试这个吗

#!/usr/bin/perl
open(my $fh_in, '<', "rmv_num_lines.txt");
my $temp = ""; #Create temporarily Scalar Variable
while (<$fh_in>)
{
    $_=~s/^\d+ //;
    $temp .= $_; #Sequence storage in the temp variable
}
close($fh_in); #Close the file before Creating the same
open(my $fh_out, '>', "rmv_num_lines.txt");
print $fh_out $temp;
#/usr/bin/perl
打开(我的$fh_in,,“rmv_num_lines.txt”);
打印$fh_输出$temp;

您能试试这个吗:

#!/usr/bin/perl
open(my $fh_in, '<', "rmv_num_lines.txt");
my $temp = ""; #Create temporarily Scalar Variable
while (<$fh_in>)
{
    $_=~s/^\d+ //;
    $temp .= $_; #Sequence storage in the temp variable
}
close($fh_in); #Close the file before Creating the same
open(my $fh_out, '>', "rmv_num_lines.txt");
print $fh_out $temp;
#/usr/bin/perl
打开(我的$fh_in,,“rmv_num_lines.txt”);
打印$fh_输出$temp;


嘿,谢谢你的回复。我试过你的推荐。我的代码是这样的:
#/usr/bin/perl open(my$fh_in,,“rmv_num_lines.txt”);虽然(){s/^\d+\s+/;print($fh_out$;)}
非常抱歉,这不是很好的格式,但我不经常使用该网站。我是否正确使用了您的代码?因为它仍然在删除我所有的文件内容。我不知道你在写你正在读的同一个文件。已修复。是的,我不应该创建新文件,只需编辑给定的文件。
$line
@line
$item
@array
更具描述性。好的,注意。当你说主循环时,你的意思是我应该用你列出的其中一个替换我的while循环吗?因为如果是这样的话,我试过了,它仍然在删除文件的所有内容。也许是我的系统还是什么?我不明白为什么这样不行。嘿,谢谢你的回复。我试过你的推荐。我的代码是这样的:
#/usr/bin/perl open(my$fh_in,,“rmv_num_lines.txt”);虽然(){s/^\d+\s+/;print($fh_out$;)}
非常抱歉,这不是很好的格式,但我不经常使用该网站。我是否正确使用了您的代码?因为它仍然在删除我所有的文件内容。我不知道你在写你正在读的同一个文件。已修复。是的,我不应该创建新文件,只需编辑给定的文件。
$line
@line
$item
@array
更具描述性。好的,注意。当你说主循环时,你的意思是我应该用你列出的其中一个替换我的while循环吗?因为如果是这样的话,我试过了,它仍然在删除文件的所有内容。也许是我的系统还是什么?我不明白为什么这样不行。你能用[at]array=读取任何行吗?我认为应该是[at]array=,因为您在中打开了$in。您能用[at]array=读取任何行吗?我想应该是[at]array=因为你在中打开了$in.WOW!成功了!如果你有时间,你能解释一下你做了什么不同于我,使它工作?或者更好的是,我做错了什么?非常感谢!打开文件后,无法再次创建相同的文件或覆盖或重命名。。。我想可能是吧。你为什么要从一个像OP那样的数组中移动数组?那是一个不必要的改变。哇!成功了!如果你有时间,你能解释一下你做了什么不同于我,使它工作?或者更好的是,我做错了什么?非常感谢!打开文件后,无法再次创建相同的文件或覆盖或重命名。。。我想可能是吧。你为什么要从一个像OP那样的数组中移动数组?这是一个不必要的改变。
#!/usr/bin/perl
open(my $fh_in, '<', "rmv_num_lines.txt");
my $temp = ""; #Create temporarily Scalar Variable
while (<$fh_in>)
{
    $_=~s/^\d+ //;
    $temp .= $_; #Sequence storage in the temp variable
}
close($fh_in); #Close the file before Creating the same
open(my $fh_out, '>', "rmv_num_lines.txt");
print $fh_out $temp;