Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] Prelevare solo... le ultime 300 righe di un file txt

    Come?

    Ho un file txt contenente ad esempio 1000 righe così composte:

    9,43,61,14,75;
    85,21,45,65,56;
    76,85,50,42,22;
    58,84,13,51,32;
    37,33,13,51,49;
    79,51,21,46,62;
    68,41,25,66,61;
    22,86,2,37,44;
    85,61,32,35,76;
    15,26,28,38,76;
    69,3,28,48,8;
    21,10,71,76,4;
    77,76,81,51,27;
    42,65,88,73,23;
    7,25,72,86,48;
    86,70,60,63,7;
    ecc...

    Avrei necessità di prelevare solo le ultime 300 righe...

    Come potrei fare? VVoVe:

    Grazie



  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Potresti usare fseek per spostarti all'interno del file ma non mi pare ragioni "per righe". Insomma, ci sarebbe da lavorarci un po' sopra :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Come dice Alex'87
    Potresti usare fseek per spostarti all'interno del file
    Ti sposti alla fine del file e ti muovi all'indietro fino a contare il numero voluto di ;

    Oppure potresti leggere il file dall'inizio contare i ; poi spostarti a quello voluto e leggere i dati. O meglio leggere e memorizzare i dati in un array della lunghezza voluta e rimpiazzare le righe più 'vecchie' con quelle più recenti.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ma non è più semplice leggere le 700 righe inutili e scartarle?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Il problema è che non sai quante sono le righe da scartare.

    1000 era un esempio. Se ho capito bene, il numero può variare.

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Mi era sfuggito
    Comunque se il file fosse sempre così:
    09,43,61,14,75;
    vale a dire con i numeri < 10 preceduti da uno zero, la cosa diverrebbe assai banale (in pratica come lavorare con campi fissi).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Cioè?

    Originariamente inviato da shodan
    Mi era sfuggito
    Comunque se il file fosse sempre così:

    vale a dire con i numeri < 10 preceduti da uno zero, la cosa diverrebbe assai banale (in pratica come lavorare con campi fissi).
    Cioè? come potrei fare? Grazie

    Comunque si avete capito bene il numero delle righe del file è variabile...


  8. #8
    se lavori su linux, ma probabilmente esiste anche la corrispondente per windows, c'è il programma tail che fa proprio quello che vuoi
    ciao
    sergio

  9. #9
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Mi serve di implementare questa cosa in c++

    Non cerco applicativi esterni.
    Lavoro in win.
    Grazie comunque.


  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Cioè?

    Originariamente inviato da freetom
    Cioè? come potrei fare? Grazie

    Comunque si avete capito bene il numero delle righe del file è variabile...

    Se tutte le righe hanno lo stesso numero di caratteri è facile spostarti in un punto particolare.
    Ad esempio, la riga "09,43,61,14,75;" sta su 15 byte (correggetemi se ho detto una cazzata).

    Quindi basterebbe usare fseek così (più o meno, è un po' che non ci metto le mani):

    codice:
      FILE *pf = fopen ("file.txt" , "r");
      /* spostati indietro di 300*15 byte a partire dalla fine del file */
      fseek(pf, -300 * 15 , SEEK_END);
    edit: quasi dimenticavo, probabilmente bisogna contare anche il carattere "a capo". Quindi invece di *15 dovresti fare *16 :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.