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

    Leggere ultima riga file

    Ciao,
    devo leggere un file testuale, per estrarre delle informazioni che so trovarsi sull'ultima riga, dato che questo file tendera a crescere col tempo, come posso aprire a saltare all'ultima riga senza scandire tutto il file???

    Grazie

  2. #2
    se intendi andare all'ultima riga in senso proprio e' possibile solo se le righe hanno lunghezza fissa. In tal caso puoi usare la funzione seek.

    Altrimenti vi sono vari sistemi per scorrere un file senza caricarlo in RAM tutto
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    per ora ho risolto cosi:

    open(FILE, "<file")
    flock(FILE,2)
    @dump = <FILE>
    flock(FILE,8)
    close(FILE)

    $lat = $dump[@dump-1];
    undef(@dump)

    non e il massimo, ma per ora mi e venuta questa in mente

    purtroppo le righe non sonoa lunghezza fissa, variano!

    mi sai redirigere su dove trovare info su come leggere senza caricare in memoria??? a livello di prestazioni degrada?


    Grazie

  4. #4
    uhm....

    Che ne dici di un:


    codice:
    open(FILE, "<file") 
    flock(FILE,2) 
    seek(FILE,-150,2);  # Sposti il cursore a 150 caratteri prima della file del file
    @dump = <FILE> 
    flock(FILE,8) 
    close(FILE) 
    
    $lat = $dump[@dump-1]; # Puoi scriverlo come $last=pop(@dump);
    undef(@dump)

    con seek(FILE,-150,2); sposti il cursore prima di 150 caratteri dalla fine del file.
    Quando vai ad inserire tutto nel vettore inserirà solo le righe successive al cursore. In questo modo farai un dump del file molto piccolo.

    Puoi evitare di usare il vettore nel seguente modo:
    codice:
    open(FILE, "<file") 
    flock(FILE,2) 
    seek(FILE,-150,2);
    $last=$_ while <FILE>; # in $last avrai l'ultima riga
    flock(FILE,8) 
    close(FILE)
    se la lunghezza delle righe è maggiore di 150 aumenti il valore di spostamento.
    Ciao
    ...

  5. #5
    carina come idea, ma non me la fido, se per qualche strano motivo la riga cambia dimensione va tutto all'aria

    Dati per semplificare (non ci avevo pensato prima!) metto un estratto del file.
    Per chi non lo conosce è il file index.txt di una CA creata con openssl, ogni riga rappresenta un certificato firmato dalla CA, io devo estrarre per l'ultima riga la 3 colonna che è il serial del certificato.

    codice:
    V	110604175501Z		94C492A5C2F83A75	unknown	/emailAddress=email/C=IT/ST=Italia/L=Milano/OU=Spektra Group/O=ISU/CN=Nome 1
    V	110604175510Z		94C492A5C2F83A76	unknown	/emailAddress=email/C=IT/ST=Italia/L=Milano/OU=Spektra Group/O=ISU/CN=Nome 2
    V	110604175513Z		94C492A5C2F83A77	unknown	/emailAddress=email/C=IT/ST=Italia/L=Milano/OU=Spektra Group/O=ISU/CN=Nome 3
    V	110604175516Z		94C492A5C2F83A78	unknown	/emailAddress=email/C=IT/ST=Italia/L=Milano/OU=Spektra Group/O=ISU/CN=Nome 4

  6. #6
    Utente di HTML.it L'avatar di luxxa
    Registrato dal
    Nov 2002
    Messaggi
    16
    Ciao,
    ho letto rapidamente il thread quindi mi posso essere perso qualcosa...
    Ma se:

    lavori sotto linux o unix
    il campo di interesse è sempre nella stessa posizione

    puoi richiamare il seguente comando di sistema:

    codice:
    tail -1 nomefile.est | cut -f4
    dove:
    tail -1 nome file.est ti estrae direttamente l'ultima riga
    cut -f4 ti estrae il quarto campo. In quanto dall'esempio che hai postato sembrerebbe essere il quarto campo a contenente l'ID del certificato e non il 3.
    Facendo un
    codice:
    tail -1 nomefile.est | cut -f3
    ottenevo uno spazio e non l'ID del certificato.

    Spero di essere stato chiaro ed utile.
    ciao,
    luxxa

  7. #7
    buona idea, anche se volevo evitare di eseguire comandi!


    grazie

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.