Avatar billede jacobmo Nybegynder
02. april 2008 - 21:11 Der er 4 kommentarer

filehandler og if($a eq $f)

Hej Experter..:)

Jeg har prøvet at lave et lille script, der sammenlinger data fra 2 filer.. Det virker meget godt, men hvis jeg nu vil have FH1, til at gå vidre til næste linje, første gang den finder 2 ens ord, hvordan gør jeg så det? (Så den ikke prøver vidre med resten af talne fra digits filen)

Scripet ser ud som følger:

#!/usr/bin/perl

open(FH0, " < digits");
while(<FH0>){
    chomp;
    ($a,$b) = split(/:/);

    open(FH1, "< alle1");
    while(<FH1>) {
        chomp;
        ($c,$d,$e,$f) = (split(/:/))[0,1,2,3]; {

        open (FH2, '>> data.txt');
        print FH2 "$a:$f\n" if($a eq $f);
        }
    }
}
close(FH0)
close(FH1)
close(FH2)

extra info:
$cat digits
1:1
2:1
3:1
4:1

$cat alle1
1:1:1:2

På forhånd tak
Jacob
Avatar billede Slettet bruger
02. april 2008 - 23:35 #1
Kunne du forklare lidt naermere hvad det er du vil?

Hvad er lige ideen i at du for hver linie i digits kan risikere at skulle aabne alle1? og er dine file handles overhovedet valid det sted du lukker dem.

Jeg vil anbefale at du overvejer brugen af

use strict;
use warnings;

gider du forklare formaalet lidt naermere saa kigger vi paa det.
Avatar billede jacobmo Nybegynder
03. april 2008 - 00:05 #2
Hej Daleif, og tak for din kommentar.

Du har ret i mine FH lukninger mangle en ";", men det er såmænd ikke det store problem..:)

Hvis du ser hvad de to filer indenholder, og så tænker at disse (især FH0), kan inden holde 30-50 millioner linjer, (FH1 indenholder som real 30k linjer) og jeg bare vil vidre til næste linje i FH1,  så snart der er fundet et match, så tror jeg det giver mening..:)

Er det ok?

Jacob
Avatar billede jacobmo Nybegynder
03. april 2008 - 01:17 #3
tror det jeg mangler er

break if
print FH2 "$a:$f\n" if($a eq $f);

Men hvordan?

Jacob
Avatar billede Slettet bruger
03. april 2008 - 10:48 #4
vil det sige at man søger frem i FH0, finder en match, behandler første linie i FH1, og hvad sker der så?

mht. dine open's så henviste jeg til at det er meget ueffektivt at du potentielt laver så mange open's for hvert gennemløb af den yderste while. Har du overvejet at bruge seek?

Kan du give et konkret eksempel på det du prøver at løse. Måske skulle man løse det på en list anden måde.
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