gpt4 book ai didi

Perl 读写文件

转载 作者:行者123 更新时间:2023-12-02 07:41:19 26 4
gpt4 key购买 nike

好的,我带着另一个问题回来了。我知道在 Python 中有一种方法可以在不指定文件是哪个文件的情况下读取文件,直到您进入命令提示符为止。所以基本上你可以设置脚本,这样你就可以读入任何你想要的文件,而不必每次都返回并更改编码。有没有办法在 Perl 中做到这一点?如果是这样,你也可以写这样的文件吗?谢谢。

这是我的:

open (LOGFILE, "UNSUCCESSFULOUTPUT.txt") or die "Can't find file";       
open FILE, ">", "output.txt" or die $!;

while(<LOGFILE>){
print FILE "ERROR in line $.\n" if (/Error/);
}






close FILE;
close LOGFILE;

这是我的名字:

#!/usr/local/bin/perl


my $argument1 = $ARGV[0];
open (LOGFILE, "<$argument1") or die "Can't find file";

open FILE, ">>output.txt" or die $!;


while(<LOGFILE>){
print FILE "ERROR in line $.\n" if (/Error/);
}





close FILE;
close LOGFILE;

它仍然没有追加...

最佳答案

@ARGV 中提供了命令行参数.您可以随意使用它们,包括将它们作为文件名传递给 open

my ($in_qfn, $out_qfn) = @ARGV;
open(my $in_fh, '<', $in_qfn ) or die $!;
open(my $out_fh, '>', $out_qfn) or die $!;
print $out_fh $_ while <$in_fh>;

但这并不是一种非常统一的做事方式。在 unix 传统中,以下将从命令行指定的每个文件中读取,一次一行:

while (<>) {
...
}

输出通常通过重定向放在文件中。

#!/usr/bin/env perl
# This is mycat.pl
print while <>;

# Example usage.
mycat.pl foo bar > baz

# Edit foo in-place.
perl -i mycat.pl foo

通常唯一一次接触 @ARGV 是处理选项,即便如此,人们通常使用 Getopt::Long而不是直接触摸 @ARGV


关于您的代码,您的脚本应该是:

#!/usr/bin/env perl
while (<>) {
print "ERROR in line $.\n" if /Error/;
}

用法:

perl script.pl UNSUCCESSFULOUTPUT.txt >output.txt

如果使 script.pl 可执行 (chmod u+x script.pl),则可以从命令中删除 perl

关于Perl 读写文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10918750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com