----- Original Message -----
From: Pablo Wolter <[EMAIL PROTECTED]>
Date: Thursday, March 24, 2005 3:43 pm
Subject: Help working/searching fields in 3 files

> Hi,

Hello,

> 
> I need some ideas because I'm just trying and error programming.
> 
> I have some .dat files that come in this format (call this file 
> dat.dat):
> #
> # Field1 description of Field1
> # Field2 description of Field2
> # Field3 description of Field3
> # Field4 description of Field4
> # Field5 description of Field5
> #
> "Field1" "Field2" "Field3" "Field4" "Field5"
> "Field1" "Field2" "Field3" "Field4" "Field5"
> "Field1" "Field2" "Field3" "Field4" "Field5"
> "Field1" "Field2" "Field3" "Field4" "Field5"
> "Field1" "Field2" "Field3" "Field4" "Field5"
> 
> And I have another two files, one a csv file with this format 
> (call this file csv.txt):
> 
> Description Field1a, Description Field2a
> Field1a, Field2
> Field1a, Field2
> Field1a, Field2
> Field1a, Field2
> 
> And another one that just contains (call this file pc.txt);
> 
> Field2
> Field2
> Field2
> Field2
> 
> What I need to do is search for each field that appears in pc.txt, 
> if this field doen't exists in the dat.dat file, then 
> I need to delete the row in csv.txt that contains Field2.
> 
> To search this I have this:
> 
> 
> sub openReadFiles {
>     sysopen(PCERROR, "$dir/$pointcodeError", O_RDONLY)
>         or die "Cannot open file $pointcodeError for reading!\n";
>     @pcError = <PCERROR>;
>     chomp(@pcError);
> 
> 
> sub openWriteFiles {
>     sysopen(PCCSV, "$dir/$ss7SigGroupPointcode", O_RDWR)
>         or die "Cannot open file $ss7SigGroupPointcode for 
> read/write!\n";     @pcCsv = <PCCSV>;
>     chomp(@pcCsv);
> }
> 
> sub ParseData {
>     @out = @_;
>     for (@out) {
>     s/^\s+//g;
>     s/\s+$//g;
>     s/\s+/ /g;
> #    s/\d+,//g;
> #    s/\d+'//g;
>     }
>     return wantarray ? @out : $out[0];
> }
> 
> sub closeAll {
>    close(PCERROR);
>    close(SS7NODE);
> }
> 
> 
> sysopen(SS7NODE, "$dir/$ss7Node", O_RDONLY)
>     or die "Cannor open file $ss7Node for reading!\n";
> openReadFiles();
> while (<SS7NODE>) {
>     (($nodeId, $name, $nodeSetId, $pointCodeId, $nodeType, $desc, 
> $monitored) = split(' ')) if ($_ !~ /^#/); #This is 
> to not consider the # at the begining of the .dat file
>     foreach $pcError (@pcError) {
> 
>         print ("\t\t$name\n");
> }
> closeAll();
> 
> But I don't know how to do it to test for the Field2 and delete 
> this field from csv file
> 
> Hope somebody can help me. I think I just need some guides or 
> examples to see how this kind of things could be achieved.

I think the main problem with your code, is lack of proper data strcutures 
which perl offers. You should try a more searchable structure such as a hash, 
so that there exists common keys/fields betwean each structure. Here is one way 
you can achive this task:

#!PERL

use warnings;
use strict;

# Lets get our dat.dat into a structure
my %Dat_Hash;
open RD, "dat.dat" or die "ERROR: $!\n";

foreach my $line ( <RD> ){
        chomp $line;
        my @tmp = split ' ',$line;
        $Dat_Hash{ $tmp[0] } = $line;

}
close RD;

# Now lets get the csv stuff
my %Csv_Hash;

open RD, "csv.txt" or die "ERROR: $!\n";

foreach my $line ( <RD> ){
        chomp $line;
        my @tmp = split ' ',$line;
        $Csv_Hash{ $tmp[1] } = $line;

}
close RD;


# and now we process pc.txt
open RD, "pc.txt" or die "ERROR: $!\n";
my $debug;

foreach my $line ( <RD> ){
        chomp $line;
        print "Match => $line !!!\n" if $Dat_Hash{$line} && $debug;
        delete $Csv_Hash{$line} if $Dat_Hash{$line};
}
close RD;

# Now you have your data in %Csv_Hash
print $Csv_Hash{$_},"\n" for keys %Csv_Hash;



> 
> Thanks in advance     
> 
> -- 
>  (o_   Pablo A. Wolter N.
>  //\   Usuario Registrado #284649
>  V_/_  Linux Debian Sid Kernel 2.6.8
> 
>  "Pienso....luego instalo Linux....entonces existo."
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to