如何在Perl中检查另一个文件的内容是否存在?

时间:2010-04-26 22:23:13

标签: perl file compare

要求: -

File1的内容与 -

相同

ABCD00000001,\some\some1\ABCD00000001,Y,,5(这表示单位共有5个文件)

File2的内容为ABCD00000001

所以我需要做的是检查File1中是否存在来自File2的ABCD00000001 - 如果是的话{

将输出打印到Output.txt,直到找到另一个',Y ,, X'}

else {No keep checking}

任何?非常感谢任何帮助。

您好Arkadiy输出应该是: - 文件1中的文件2 -ABCD00000001和Y到Y的任何文件名。 例如: - 文件1结构将是: -

ABCD00000001,\some\some1\ABCD00000001,Y,,5
ABCD00000001,\some\some1\ABCD00000002
ABCD00000001,\some\some1\ABCD00000003
ABCD00000001,\some\some1\ABCD00000004
ABCD00000001,\some\some1\ABCD00000005
ABCD00000001,\some\some1\ABCD00000006,Y,,2
so out put should contain all line between 
ABCD00000001,\some\some1\ABCD00000001,Y,,5 and

ABCD00000001,\ some \ some1 \ ABCD00000006,Y ,, 2

#!/usr/bin/perl -w
use strict;


my $optFile = "C:\\Documents and Settings\\rgolwalkar\\Desktop\\perl_scripts\\SampleOPT1.opt";
my $tifFile = "C:\\Documents and Settings\\rgolwalkar\\Desktop\\perl_scripts\\tif_to_stitch.txt";
print "Reading OPT file now\n";
open (OPT, $optFile);
my @opt_in_array = <OPT>;
close(OPT);

foreach(@opt_in_array){
    print();
}

print "\nReading TIF file now\n";

open (TIF, $tifFile);
my @tif_in_array = <TIF>;
close(TIF);

foreach(@tif_in_array){
    print();
}

所以它只读取2个文件“FYI - &gt;我是编程的新手”

2 个答案:

答案 0 :(得分:1)

尝试将问题分解为不连续的步骤。看来你需要这样做(虽然你的问题不是很清楚):

  • 打开file1进行阅读
  • 打开文件2进行阅读
  • 逐行读取file1:
    • 对于file1中的每一行,检查file2中是否有特定内容

你有哪些部分遇到困难?到目前为止你有什么代码?一旦你在内存中有一行,你可以使用正则表达式将它与另一个字符串进行比较,或者可能是一种更简单的比较形式。

答案 1 :(得分:0)

好的,我会咬(部分)......

第一个一般性评论。使用strict和-w是好的,但是你没有检查打开或明确说明你想要的读/写模式的结果。

您的OPT文件的内容有点像是CSV,第二个字段看起来像Windows路径,是吗?如果是这样,请使用CPAN中的相应库来解析CSV并验证您的文件名。否则可能会导致痛苦和痛苦......

正如以前所说的那样,你需要读取文件OPT然后匹配你想要的字段。如果第一个文件是CSV,首先需要解析它而不破坏文件名。

这是一个解析您的OPT文件的小片段。此时,它所做的只是打印字段,但您可以轻松添加逻辑以匹配其他文件。只需将整个第二个文件(slurp)读入一个字符串,然后与您从第一个文件中选择的字段匹配:

#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;

my $csv = Text::CSV->new();
my @opt_fields;


while (<DATA>) {
    if ($csv->parse($_)) {
        push @opt_fields, [ $csv->fields() ];
    } else {
        my $err = $csv->error_input;
        print "Failed to parse line: $err";
    }
}


foreach my $ref (@opt_fields) {
#   foreach my $field (@$ref) { print "$field\n"; }
    print "The anon array: @$ref\n";
    print "Use to match?: $ref->[0]\n";
    print "File name?: $ref->[1]\n";
}

__DATA__
ABCD00000001,\some\some1\ABCD00000001,Y,,5
ABCD00000001,\some\some1\ABCD00000002
ABCD00000001,\some\some1\ABCD00000003
ABCD00000001,\some\some1\ABCD00000004
ABCD00000001,\some\some1\ABCD00000005
ABCD00000001,\some\some1\ABCD00000006,Y,,2