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

    [c++] Assegnare a 5 variabili cinque valori precisi di un file txt di enne righe

    Avrei la necessità senza ricorrere al "token" di prelevare nella maniera più pratica possibile 5 valori separati da virgola posti all'ultima enne riga di un file txt e assegnarli a 5 rispettivi variabili.

    Più dettagliatamente...

    1,2,3,4,5
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ----------
    ---------- (ultima estrazione)


    In questo caso la 24°esima ultima estrazione è composta da valori 1,2,3,4,5 tutti separati da "," io vorrei chiedere tramite cin il valore di riga voluto (es 24 per ultima 24° riga)
    e poi assengnare i 5 valori della 24° riga a cinque variabili

    per avere ad esempio:

    primo:1
    secondo:2
    terzo:3
    quarto:4
    quinto:5

    Tutto questo non ricorrendo a token... se possibile...
    Per adesso i cinque valori li ottengo inserendoli a mano... mediante richiesta by cin.

    Grazie agli/alle esperti/e


  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Sorvolando sul titolo davvero appropriato, che poi correggerò, hai provato a scrivere del codice? hai fatto una ricerca preventiva? se sì, cosa non ha funzionato?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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

    Si ho provato con la soluzione "token"

    Ma appunto mi chiedevo se fossero possibili altre soluzioni "più pulite"

    Grazie per la rapidità d'intervento...


  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se il numero di caratteri è variabile (ci sono anche numeri a due cifre) acquisisci il numero di riga, effettui un ciclo tramite un while acquisici la linea tramite una getline(cin,std::string), dai in pasto la std::string a un istringstream e estrai i valori con la sequenza:
    >> int >> char >> int etc.

    altrimenti il file si può considerare a campi fissi e puoi posizionarti direttamente alla riga che vuoi calcolando l'offset dalla fine del file e usando seekg. Ricavi la stringa e usi lo istringstream.

    Altri modi non ne vedo dato che i file di testo non sono adatti a ricerche random.
    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
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    così a impatto...

    Originariamente inviato da shodan
    Se il numero di caratteri è variabile (ci sono anche numeri a due cifre) acquisisci il numero di riga, effettui un ciclo tramite un while acquisici la linea tramite una getline(cin,std::string), dai in pasto la std::string a un istringstream e estrai i valori con la sequenza:
    >> int >> char >> int etc.

    altrimenti il file si può considerare a campi fissi e puoi posizionarti direttamente alla riga che vuoi calcolando l'offset dalla fine del file e usando seekg. Ricavi la stringa e usi lo istringstream.

    Altri modi non ne vedo dato che i file di testo non sono adatti a ricerche random.
    Il passo che al momento mi risulterebbe più "oscuro" è l'ultimo:

    e estrai i valori con la sequenza:
    >> int >> char >> int etc.

    Me lo spiegheresti con un es.? Oppure indicarmi un link con un esempio relativo?

    Grazie!


  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Hai cinque variabili int e quattro char no?
    codice:
    int a,b,c,d,e;
    char comma;
    
    istringstream iss(line);
    iss >> a >> comma >> b >> comma >> c >> comma etc.
    In a,b,c... ti ritrovi i numeri
    in comma la virgola.

    In teoria potresti farlo pure con lo ifstream ma se sbagli qualcosa rischi di invalidarlo.
    Meglio usare un buffer e agire su quello.
    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

    ci provo e ti fo sapere...

    Originariamente inviato da shodan
    Hai cinque variabili int e quattro char no?
    codice:
    int a,b,c,d,e;
    char comma;
    
    istringstream iss(line);
    iss >> a >> comma >> b >> comma >> c >> comma etc.
    In a,b,c... ti ritrovi i numeri
    in comma la virgola.

    In teoria potresti farlo pure con lo ifstream ma se sbagli qualcosa rischi di invalidarlo.
    Meglio usare un buffer e agire su quello.
    Intanto grazie 1000


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

    ciao shodan

    Per adesso avrei provato a riaddattare parzialmente un codice che riesce egregiamente a estrapolare ogni numero per ruota partendo dal file storico.txt in questo modo:

    codice:
    cout << "Numero per l'ultima estrazione di partenza voluta?:";
    cin >> numeroestrazionedipartenza;	
    
    
    ifstream fin;
    fin.open("ESTRAZIONI-BA-CA-FI-GE-MI-NA-PA-RM-TO-VE-RN.txt");
    
    	
    	string s;
    	bool isOk = false;
    	int cnt = 0;
    	
    	while(!fin.eof())
    	{ 
    		fin >> s;
    
    		if(isOk)
    		{
    			if(cnt<4)
    			{
    				cout << s << ",";
    				cnt++;
    			}
    			else if(cnt<5)
    			{
    				cout << s;
    				cnt++;
    			}
    			else
    			{
    				cout << "" << endl;
    				cnt=0;
    				isOk=false;
    			}
    		}
    
    		if(sei posizionato sulla riga voluta [numeroestrazionedipartenza]) isOk=true;
    	}
    Però come vedi non so cosa mettere nella parte if dove c'era un controllo sul nome delle ruote del tipo if (s=="BA" || s=="CA" ) ecc... affinchè tutto parta dal numero di ultima estrazione voluta...

    Io adesso qui dovrei mettere il numero di riga voluto per iniziare la raccolta dei 5 valori per ruota...

    Così facendo credo che mi estrapolerebbe tutti i 5 valori per ogni ruota che potrei raccogliere (ma al momento ignoro come... in 55 variabili distinte essendo 11 le ruote da analizzare)

    Grazie infinite se puoi aiutarmi a "tappare" i buchi di questo codice.

    Una piccola aggiunta descrittiva:

    il file ESTRAZIONI-BA-CA-FI-GE-MI-NA-PA-RM-TO-VE-RN.txt è così strutturato:

    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero
    numero,numero,numero,numero,numero

    ecc...

    e dovrei riuscire ad estrapolare i 5 numeri per ogni riga secondo blocchi di 11 righe per volta appunto... (partendo da quella di bari ma che vedo a occhio... quando inserisco il valore con cin)

    avendo ad esempio:
    x bari
    valore1 = numero
    valore2 = numero
    valore3 = numero
    valore4 = numero
    valore5 = numero
    x cagliari
    valore6 = numero
    valore7 = numero
    valore8 = numero
    valore9 = numero
    valroe10 = numero
    ecc...
    fino a...
    xa nazionale
    valore50 = numero
    valore51 = numero
    valore52 = numero
    valore53 = numero
    valore54 = numero
    valore55 = numero



  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Secondo me hai tutti gli elementi e le conoscenze per elaborare e parserizzare il file.
    Tra l'altro non vedo la necessità di complicarsi la vita tenendo un unico file con tutte le ruote ed estrazioni invece di avere un singolo file per ruota con le varie estrazioni.

    1) Ti semplifica la vita
    2) per aggiornare una ruota ti basterebbe aprire il file corrispondente e aggiornarlo.

    A ogni modo ti dò una hint sul codice che hai proposto:
    sebbene fin.eof() sia teoricamente corretto, in pratica è meglio fare:

    codice:
    	while(getline(fin,s))
    	{
    altrimenti l'ultima riga e ripetuta.
    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.

  10. #10
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725
    Originariamente inviato da shodan
    Secondo me hai tutti gli elementi e le conoscenze per elaborare e parserizzare il file.
    Tra l'altro non vedo la necessità di complicarsi la vita tenendo un unico file con tutte le ruote ed estrazioni invece di avere un singolo file per ruota con le varie estrazioni.

    1) Ti semplifica la vita
    2) per aggiornare una ruota ti basterebbe aprire il file corrispondente e aggiornarlo.

    A ogni modo ti dò una hint sul codice che hai proposto:
    sebbene fin.eof() sia teoricamente corretto, in pratica è meglio fare:

    codice:
    	while(getline(fin,s))
    	{
    altrimenti l'ultima riga e ripetuta.
    Grazie shodan per l'ottimizzazione per evitare il doppio risultato finale (molto utile!!!) però mi daresti anche il modo di modificare l'if in modo che il cursore si riposizioni all'inizio della enne ultima riga voluta impostata manualmente una volta con il valore preso tramite cin?

    Grazie infinite!


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.