Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    gestione dei file in perl

    è sorto un altro problemino...Allora qst volta ho due file contenenti ciascuno una sequenza di numeri e devo stampare in output i numeri presenti nei due file sommati però a coppia.
    Vi faccio un esempio,se il file A è costituito da
    3 6 12
    21 1
    ed il file B da
    0 1 5

    il mio output dovrà essere:
    3 7 17 21 1
    Come faccio a far scorrerre tutti e due file contemporaneamente?
    posso usare il foreach con due file?
    :master:

  2. #2
    Si, non credo ci siano problemi
    "L'utopia è come l'orizzonte: cammino due passi, e si allontana di due passi. Cammino di dieci passi, e si allontana di dieci passi. E allora, a cosa serve l'utopia? A questo: serve per continuare a camminare."
    Eduardo Galeano
    Il mio sito
    "if you want people to RTFM, make a better FM!"

  3. #3
    ma se faccio:
    "foreach $riga(@file1,@file2)"

    dopo in $riga ho sia il file1,che il file 2..come faccio a separarli ed a prendere un elemento per volta di ciascuna riga di ciascun file per poi sommarli?
    help me

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,526
    Ciao, fallo in bash

    arr=($(<file)) ; arr1=($(<file1)); for ((i=0; i<${#arr[@]}; i++)); do echo $((${arr[i]}+${arr1[i]})); done

    dove file è il tuo primo file
    3 6 12 21 1

    e file1 è il secondo file
    0 1 5 0 0
    dove avrai cura di riempire tutte le colonne anche se son vuote con uno zero per evitare un errore.

    il risultato dell'operazione è
    3
    7
    17
    21
    1

  5. #5
    Grazie mille..ma devo farlo a forza in perl..Cmq ci sono quasi riuscita..solo che non ha capito ancora un ultima cosa...Vi scrivo il codice che ho scritto:

    codice:
    #!/usr/bin/perl
    open(FILE,$ARGV[0]);
    open(FILE1,$ARGV[1]);
    
    @read=<FILE>;
    @read2=<FILE1>;
    
    chomp @read;
    chomp @read2;
    
    foreach $line(@read)
    {
              @p=split(' ',$line);
    
    
    foreach $line2(@read2)
    {
       
    
        @p2=split(' ',$line2);
    
    
    for($i=0;$i<@p;$i++){
          $num=$p[$i]+$p2[$i];
    print $num;
    }
    
    }
    
    }
    La somma cosi la fa e scorre i due file..però una volta che inizia il primo foreach che fa scorrerre il file :
    3 6 12
    21 1

    dopo al secondo foreach che dovrebbe far scorrerre il file 0 1 5 qst ultimo file diventa 0 1 5 0 1 5 e quindi raddoppia in base alle righe del primo file..Come faccio ad evitare ciò????

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,526
    a questo punto spostatela nella sezione programmazione

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    che ne dici di questo ?

    codice:
    #!/usr/bin/perl
    
    open(FILE1, $ARGV[0]);
    open(FILE2, $ARGV[1]);
    
    @file1 = <FILE1>; chomp @file1;
    @file2 = <FILE2>; chomp @file2;
    
    foreach $line(@file1) {
    	push(@nums1, split (' ', $line));
    }
    foreach $line(@file2) {
    	push(@nums2, split (' ', $line));
    }
    
    $max = scalar(@nums1);
    if ($max < scalar(@nums2)) {
    	$max = scalar(@nums2);
    }
    for ($i = 0; $i < $max; $i++) {
    	$num = @nums1[$i] + @nums2[$i];
    	push(@results, $num);
    }
    
    print "\nfile1 : @file1\nfile2 : @file2\nresult: @results\n\n";

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.