Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/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 读入文件并为共享密钥添加其他唯一值_Perl_Csv - Fatal编程技术网

Perl 读入文件并为共享密钥添加其他唯一值

Perl 读入文件并为共享密钥添加其他唯一值,perl,csv,Perl,Csv,抱歉,如果标题含糊不清或令人困惑-我很难准确表达我想做什么 我有几个.csv文件,其中包含两列数据,格式为“”、“”。每个.csv文件代表不同的语言;以下是其中三个示例: int.csv: "55545","Hello.", "55546","I'm new to perl.", "55547","Bonus string!", "55548","Please help.", fra.csv: "55545","Bonjour.", "55546","Je suis nouveau à per

抱歉,如果标题含糊不清或令人困惑-我很难准确表达我想做什么

我有几个.csv文件,其中包含两列数据,格式为“
”、“
”。每个.csv文件代表不同的语言;以下是其中三个示例:

int.csv:

"55545","Hello.",
"55546","I'm new to perl.",
"55547","Bonus string!",
"55548","Please help.",
fra.csv:

"55545","Bonjour.",
"55546","Je suis nouveau à perl.",
"55548","S'il vous plaît aider.",
ita.csv:

"55545","Ciao.",
"55546","Sono nuovo di perl.",
"55547","Stringa di Bonus!",
"55548","Si prega di aiutare.",
我想做的是读入这些文件,并将它们合并成一个.csv文件,从int.csv开始,然后从那里添加到右边。如果int.csv中有一个条目在其他条目中不存在,我想插入一个空值,以便保持列正确对齐

因此,我期望的输出是:

"55545","Hello.","Bonjour.","Ciao.",
"55546","I'm new to perl.","Je suis nouveau à perl.","Sono nuovo di perl.",
"55547","Bonus string!","","Stringa di Bonus!",
"55548","Please help.","S'il vous plaît aider.","Si prega di aiutare.",
这些源.csv文件是由我编写的perl脚本生成的,因此如果需要,可以编辑源文件。我的直觉是逐行解析每个.csv,将字符串ID和字符串值捕获到散列的键/值中,但我不确定如何真正做到这一点,更不用说将其中的两个(或更多)合并到一个散列中了


如有任何指导/指示,将不胜感激。我上周才开始学习perl,使用了大量的试错和在线资源,我对$scalars和@array已经相当熟悉,但哈希是一个陌生的领域。谢谢

这是您可能想做的粗略概述:

在中读取所有三个文件,并将所需信息提取到VAR中

while (<$file1>){
    chomp;
    my ($id, $word) = /"(\d+)","(.*)"/;
将所有文件存储在如下哈希中后,可以在不同哈希中查找键之间的重叠:

    for my $id (keys %english_hash){
    print "$id\t English: $english_hash{$id}\t";
        if (exists $french_hash{$id}){
            print "French: $french_hash{$id}\n";
        }
        else {print "French: [...]\n"}  
}
根据英文和法文输入,此打印:

55547    English: Bonus string! French: [...]
55548    English: Please help.  French: S'il vous plaît aider.
55545    English: Hello.    French: Bonjour.
55546    English: I'm new to perl.  French: Je suis nouveau à perl.

对于
如果存在$french_hash{$id}
,我会对每种语言重复这一点吗?是的-这样您就可以在所有散列中找到共享同一键(数字ID)的值(单词)…在混合中引入多种语言时,我仍然存在一个问题。我希望能够输出英语中存在的条目,即使它们在其他语言中不存在,在这种情况下,我希望替换一个空值(“”),以保持列结构完整。这可能吗?删除
如果存在$french_hash{$id}
导致未初始化的值错误,我不确定在何处(或如何)定义
$french_hash{$id}
语句。附录:我考虑添加另一个
print
条目,使用
除非存在
,而不是
如果存在
,但是,当你引入两种以上的语言时,你会遇到一个问题——你必须为每种可能的结果设置条目,而这些结果会呈指数增长。@nkaun——我只想使用几个if语句。我已经更新了答案-应该会产生正确的英语和法语结果。。。
55547    English: Bonus string! French: [...]
55548    English: Please help.  French: S'il vous plaît aider.
55545    English: Hello.    French: Bonjour.
55546    English: I'm new to perl.  French: Je suis nouveau à perl.