要求: -
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
#!/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();
}
答案 0 :(得分:1)
尝试将问题分解为不连续的步骤。看来你需要这样做(虽然你的问题不是很清楚):
你有哪些部分遇到困难?到目前为止你有什么代码?一旦你在内存中有一行,你可以使用正则表达式将它与另一个字符串进行比较,或者可能是一种更简单的比较形式。
答案 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