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

    [Perl] Lavorare con file .tar.gz

    Ciao, sto imparando il Perl al volo per un lavoro che devo fare, quindi perdonatemi se non sono molto esperto in materia.
    Ho due file di testo compressi in formato tar.gz. Devo fare una specie di merge tra i due file che non sto a spiegare nel dettaglio (per ora ) . Basri sapere che il mio obiettivo è leggere i files riga per riga in contemporanea e copiare le righe che mi servono in un nuovo files di output. Questi file hanno dimensioni molto grandi, tipo 2 Giga compressi e tra i 5-6 Giga non compressi. Ne converrete con me che sarebbe opportuno lavorare sui file lasciandoli compressi. Ho guardato nella doc di Perl e ho visto che ci sono i metodi come
    use Archive::Tar;
    my $tar = Archive::Tar->new;
    $tar->read('origin.tgz');
    questo metodo però porta il file da elaborare in memoria a quanto ho capito. Il che mi sembra proibitivo viste le dimensioni dei files. Ci sono alternative a questi metodi? Sennò cosa mi consigliate di fare?

  2. #2
    ciao,
    devi per forza decomprimerli, anche se ti occuperanno 5-6 Gb di spazio su disco (che sono meglio di 5-6 Gb in RAM).

    Una volta che li hai decompressi,
    se usi un while per leggere il file,
    ti legge una riga per volta quindi direi che non hai da preoccuparti, perché tutto il file NON verrà caricato in memoria.

    NON devi pero' usare un foreach, altrimenti il file verrà caricato in memoria.

  3. #3
    Ah ok quindi tutte tutte le funzioni che agiscono sul tar lo portano in memoria? Se così allora non conviene per niente..per decomprimerli se lo faccio fare a perl guadagno qualcosa in prestazioni? Perchè senno imposto che come input il programma debba avere i due file non compressi e bon, altrimenti faccio io l'estrazione.
    Nel caso estraessi con perl, ho visto che c'è la funzione $tar->extract( [@filenames] ), a quel punto avrei nel vettore @filenames il nome del file (in $filename[0], visto che l'archivio ah un file solo), ma posso fare riferimento a $filename[0] come se fosse un normale file? Cioè se faccio poi una open o una print <flussodestinazione> me la accetta?

  4. #4
    ciao,
    per rispondere alla tua domanda,
    non credo che tu abbia significativi incrementi di prestazione a lavorare con Archive::Tar :
    a sua volta si appoggerà ai binari tar, gz e bz2.

    Per come la vedo io, a meno che tu non voglia inserire nel tuo programma l'automazione della
    creazione degli archivi, per le performances tanto vale scompattare a mano.

  5. #5
    Perfetto, grazie mille dell'aiuto!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.