gpt4 book ai didi

perl - "Invalid argument"在 perl 中使用 3 部分打开时

转载 作者:行者123 更新时间:2023-12-04 11:25:00 26 4
gpt4 key购买 nike

我对 perl(和编程,就此而言)非常陌生,所以如果这只是一个愚蠢的错误,我很抱歉。

我正在尝试编写一个脚本,该脚本从 .txt 文件中提取文件列表,打开每个文件,查找与某些正则表达式匹配的行,并将这些行打印到结构中的新文件,该结构将生成有效的 .csv文件(使用正则表达式中的捕获组)。

我的脚本适用于英语 UTF-8 文件,但是当它尝试处理非英语文件时,文本数据在每个字母之间出现空格,并且正则表达式不匹配 - 我猜这是因为它们以 UTF 格式保存-16.我的想法是将 open 命令分成三部分,以便它也对非英语文件使用 ":encoding(UTF-16)"参数,但这导致了无效参数错误。事实上,如果不使用由两部分组成的 open 命令,我根本无法让脚本运行。

这是我的脚本。

use 5.010;
use strict;
use warnings;

use File::Slurp;

my @intfilelist = read_file('filelist_int.txt');

unlink "int_temp.csv";

foreach my $intfile (@intfilelist) {
open (my $file, "<:encoding(UTF-16)", $intfile) or die "Whoops! $!";
while (my $line = <$file>) {
if ($line =~ m/^(\d{3,5})\t(.*)$/) {
chomp $line;
open (my $csv, ">>", "int_temp.csv");
print $csv ("\"$intfile\",\"$1\",\"$2\"\n");
close $csv;
}
}
}

open (my $file, "<:encoding(UTF-16)", $intfile)open (my $file, $intfile)导致脚本工作,除了上述非英语文件的问题。

就像我说的,我只玩了 2 天 perl,如果我误用了一些术语或忽略了一些明显的东西,那么抱歉。感谢任何帮助!

最佳答案

使用 File::Slurp 删除从第一个文件中读取的文件名末尾的换行符.你可以用 chomp $intfile; 来做到这一点就在 open 之前.
chomp (参见 Perldoc Chomp )从给定字符串的末尾删除换行符。

关于perl - "Invalid argument"在 perl 中使用 3 部分打开时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21173625/

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