Avatar billede stpa01ad Nybegynder
23. april 2004 - 14:06 Der er 4 kommentarer

sammenlign indhold af to filer

hej,
jeg har et program med en fil der indeholder navne. Når brugeren indtaster et navn på skærmen, tjekker programmet om navnet findes i filen og uskriver et svar. Jeg vil gerne lave programmet om så den læser input fra en fil - linie for linie - og tjekker det men filen med navne for at finde et match.
Mit program ser således ud:
#!/usr/bin/perl
use strict;
use FileHandle;


my $filename = "file.txt";
my $outfile = "godkendtnavn.txt";

my $ind = new FileHandle ("< $filename");
my $ud = new FileHandle ("> $outfile");

my $found = 0;

print "indtast navn:";
my $navn;
chomp($navn=<STDIN>);

while (<$ind>) {
  chomp;
  if ($navn eq $_) {
    $found = 1;
  }
}
Avatar billede stpa01ad Nybegynder
23. april 2004 - 14:07 #1
Jeg fik ikke hele programmet med. Her er det:
#!/usr/bin/perl
use strict;
use FileHandle;
                                                                                                                           
                                                                                                                           
my $filename = "file.txt";
my $outfile = "godkendtnavn.txt";
                                                                                                                           
my $ind = new FileHandle ("< $filename");
my $ud = new FileHandle ("> $outfile");
                                                                                                                           
my $found = 0;
                                                                                                                           
print "indtast navn:";
my $navn;
chomp($navn=<STDIN>);
                                                                                                                           
while (<$ind>) {
  chomp;
  if ($navn eq $_) {
    $found = 1;
  }
}
                                                                                                                           
                                                                                                                           
  if ($found == 1) {
    print $ud "navnet $navn er et godkendt drengenavn \n";
    print "navnet $navn er et godkendt drengenavn \n";
  }  else {
    print $ud "navnet $navn er ikke godkendt drengenavn\n";
    print "navnet $navn er ikke et godkendt drengenavn\n";
  }
Avatar billede bollox Nybegynder
24. april 2004 - 13:35 #2
Hvad med

#!/usr/bin/perl -w

$fileName = "file.txt";
$nameFile = "godkendtnavn.txt";

open( IN,    $fileName  ) || die "File $fileName  not found";
open( NAMES, $nameFile )  || die "File $nameFile not found";

@inArray = <IN> ;
@nameArray = <NAMES> ;

for ( $i=0 ; $i <= $#inArray; $i++ )
{
  chop( $inArray[$i] );
  $currentName = $inArray[$i] ;
  @match = grep( /$currentName/, @nameArray );
  if ( $#match < 0 )
  {
    print "Who is [$inArray[$i]]\n";
  }
  else
  {
    print "We have a match [$currentName]\n";
  }
}
Avatar billede stpa01ad Nybegynder
27. april 2004 - 14:27 #3
dit forslag søger ikke hele filen i gennem. Hvis ikke de samme elementer står på de samme pladser, virker programmet ikke.
Avatar billede bollox Nybegynder
28. april 2004 - 12:21 #4
'for' lykken undersøger alle linier i file.txt
For hver linie grep'es i nameArray som indeholder alle godkendte navne.
Hvad mener du med at filen ikke søges helt igennem og at rækkefølgen har nogen indflydelse?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester