Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    100

    funzione seekg

    Salve devo utilizzare la funzione seekg dell istream:

    codice:
           fn.str("");
            gn.str("");
            string s2;
          
            fn << 1;      
            gn << 2;
           
            file= "pippo"+fn.str()+"pluto"+gn.str()+".txt";
            ifstream f2(file.c_str());
            f2.seekg (5, ios::end);
            getline(f2, s2);
            cout <<s2 <<endl;
         
            f2.close();
    e il file pippo1pluto2.txt termina con
    55555555555555555555555555rrrrrrrrrrr

    l output non stampa niente.
    perchè non mi stampa la successione di r ?

    Se invece gli dò f2.seekg (5, ios::begin); allora stampa giustamente la parte finale della prima riga. Ho forse capito male io l'ios::end? non mette il cursore a 5 posizioni prima dell ultimo carattere?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    Invito l'autore a prendere visione del Regolamento interno: manca completamente l'indicazione del linguaggio di programmazione, sua nel titolo (obbligatorio), sia nel corpo della discussione. Manca, inoltre, l'utilizzo dei tag CODE per il posting del codice.

    Correggo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    100
    ringrazio e mi rispindo da solo, il valore (nel mio caso 5) sposta il cursore dopo l'end, quindi mettendo -5 lo sposta prima e ho risolto, grazie.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    100
    Un ultima cosa, esiste una funzione che ti riporta all inizio dell riga?

    mi spiego:

    l ultima riga del mio file è:

    il numero medio è: xxx

    ora, il numero xxx può essere 3,6 come 10,55 quindi non ho una posizione fissa di cui spostare il cursore.
    Però il numero inizia sempre da dopo "è: " quindi l idea che avevo è di spostare il cursore partendo dal fondo fino all inizio della riga e poi di spostarlo di nuovo in avanti di 19 caselle, quindi fino al primo x.

    esiste quindi una funzione che ti riporta all inizio dell riga?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    mi sembra di avertelo già detto, devi andare a ritroso partendo dalla fine del file fino a che non trovi il carattere di fine riga che è '\n' .

    ciao
    sergio

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    100
    sì ma il problema è che l ultima riga è di lunghezza che varia, quindi se faccio per esempio f2.seekg (-50, ios::end); arrivando allo /n (supponendo un ultima riga di dimensione 50) va bene.

    Ma se dopo cambia e diventa di lunghezza 51, il puntatore (che è a 50) mi và alla riga precedente.

    Non so se mi sono spiegato.

    posso fargli un while mettendo come condizione trovare la /n? come posso fare?

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    225
    codice:
      char c;
      ifstream is;
      is.open("mio_file")
     
      unsigned int i = 0;
    
      while ( is.good() )    {
    
        is.seekg ( i, ios::end );
    
        c = is.get();      
        if ( is.good() && c == '\n' )
          break;
        i--;
    
      }
    
      .....
    [edit]

    is.seekg ( -i, ios::end );

    [edit]

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    100
    perfetto, appena esco da lavoro provo subito grazie mille.

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    100
    l ho un pò modificato:
    non apro il file:

    int pos_punt = 2;
    char c;

    while ( f2.good() ) {

    f2.seekg ( -pos_punt, ios::end );

    c = f2.get();


    if ( c == '\n' )
    break;

    pos_punt++;

    }

    più che altro funziona solo per pos_punt>2
    non sò perchè. Se metto 0 o 1 mi dà tutti zeri. Cmq ora và. 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 © 2025 vBulletin Solutions, Inc. All rights reserved.