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

    [c++] dato un file di enne righe...

    Avrei necessità di scendere... di 15 righe a partire dall'ultima e di estrapolare le restanti per un totale di 800 ca. L'ultima parte del problema sono in grado di farla ma non riesco a scendere... di 15 righe...

    es...

    riga900 <- l'estrapolazione delle precedenti 800 righe dovrebbe avvenire da qui...
    riga901
    riga902
    riga903
    riga904
    riga905
    riga906
    riga907
    riga908
    riga909
    riga910
    riga911
    riga912
    riga913
    riga914
    riga915


    Grazie


  2. #2
    In C++ quindi usi gli fstream ?
    hai provato ad andare alla fine del file con fseek o seekg e andare indietro contando il numero di '\n' che trovi ?
    lolide
    Java Programmer

    Informati

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

    Dunque io per adesso...

    Originariamente inviato da lolide
    In C++ quindi usi gli fstream ?
    hai provato ad andare alla fine del file con fseek o seekg e andare indietro contando il numero di '\n' che trovi ?
    Riesco ad estrapolare le ultime righe volute con questo cod (del mitico oregon se non erro...):

    Es. le ultime 500 righe le estrapolo così:

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    #define LINEE 500
    
    int main()
    {
    	ifstream f;
    	f.open("ESTRAZIONI-BARI.txt", ios::binary);
    
    	int ri=0;
    	f.seekg(-1, ios::end);
    	char c;
    	f.get(c);
    	
    	//APRO FILE CON LE ULTIME RIGHE CHE INTERESSANO
    	
    	 ofstream fout;
    	 fout.open("ESTRAZIONI-BARI-ULTIME-500.txt");
    
    	
    	//---------------------------------------------
    	
    	while(ri<LINEE)
    	{
    		if(c=='\n') ri++;
    		f.seekg(-2, ios::cur);
    		if(f.fail()) 
    		{
    			f.clear();
    			f.seekg(0, ios::beg);
    			break;
    		}
    		f.get(c);
    	}
    
    	string line;
    	getline(f, line);
    	getline(f, line);
    	while(!f.fail())
    	{
                        
            //scrivo su file ogni linea rilevata
    		fout << line;
    		fout << "\n";
    		//----------------------------------
    		cout << line << endl;
    		getline(f, line);
    		
    		//cin.get();
    	}
    
    	f.close();
    
    	//return 0;
    }
    Ora però come ho scritto nel primo post avrei necessità di estrapolare le 520 ultime righe togliendo le ultime 20... il tutto in automatico (come posso togliere le ultime 20?)

    E se possibile alla fine scomporre in 5 file distinti le diverse 5 "colonne" formate dai numeri intervallati da virgola...

    es:

    alla fine dei giochi...
    il file contenente le righe...

    a,b,c,d,e
    f,g,h,i,l,

    sarà scomposto in...

    file1.txt contiene a e f
    file2.txt contiene b e g
    file3.txt contiene c e h
    file4.txt contiene d e i
    file5.txt contiene e e l

    Grazie agli/alle esperti/e come lolide, oregon ecc...


  4. #4
    Usi seekg per andare alla fine del file (con fout.seekg(0, ios::end))

    In un ciclo vai su di byte in byte, leggi il carattere con read, e se il carattere letto corrisponde a '\n' incrementi un contatore con il quale ti tieni il conto dei '\n' trovati. Qudno il contatore arriva a 13 allora sei alla linea 13

    Leggi la linea con fout.getline e fai quello che devi fare.
    lolide
    Java Programmer

    Informati

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.