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

    [c++] Prb con gestione file e split di stringhe

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    
    /* strtok example */
    #include <stdio.h>
    #include <string.h>
    
    using namespace std;
    
    int main ()
    {
      string linea;  
      fstream read_write("filedaleggere.txt",ios::in | ios::out);
      getline(read_write,linea,'\n');  
      cout << linea;
      cin.get();
        
      char str[] =linea;
      //char str[] ="- This, a sample string.";
      char * pch;
      printf ("Splitting string \"%s\" into tokens:\n",str);
      pch = strtok (str," ,.-");
      while (pch != NULL)
      {
        printf ("%s\n",pch);
        pch = strtok (NULL, " ,.-");
      }
    cin.get();
    }
    Perchè mi da errore alla riga char str[] = linea; ???

    e inoltre...

    come faccio a recuperare in variabili gestibili i contenuti splitatti salvati in pch
    es. se le righe da splittare nel file filedaleggere.txt sono:

    1,2
    3,4
    6,7

    (da un minimo di 0 righe ad un massimo di 10)

    come faccio a recuperarmi i singoli valori separati dalla virgola?
    Dovrei svolgere azioni appropriate in base ad ogni riga e i suoi elementi...
    Es.
    Per riga con 1 e 2 fai questo
    Per riga con 3 e 4 fai questo
    Se non c'e' più righe fermati
    Se non ci sono righe non fare nulla

    Credevo fosse come andare in bicicletta che uno non si dimentica... invece... almeno per me... per il c++ non è stato così...

    Grazie agli/alle esperti/e del c++


  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché non fai semplicemente

    codice:
      string elem;
      while (getline(read_write, elem, ',')) 
    		cout << elem << endl;
    e gestisci elem nel ciclo come meglio vuoi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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

    Grazie oregon o nessuno se preferisci ;)

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    
    #include <stdio.h>
    #include <string.h>
    #include <vector>
    
    using namespace std;
    
    int main ()
    {
    
    vector<string>numeri;
      
      fstream read_write("filedaleggere.txt",ios::in | ios::out);
      //getline(read_write,linea,'\n');  
      //cout << linea;
      //cin.get();
      
      string elem;
      while (getline(read_write, elem, ',')) 
    		cout << elem << endl;  
      numeri.push_back(elem);
    
    cin.get();
    
    //apro il vector e mostro i singoli elementi
    for (int i=0; i<numeri.size()+1; i++) {
    
    cout << "elemento1:";
    cout << numeri[0];
    cout << "\n";
    cout << "elemento2:";
    cout << numeri[1];
    cout << "\n";
    cin.get();
    
    }
    
    }
    Ho aggiunto (sbagliando qualcosa sicuramente) del cod per prendere ogni elem e metterlo in un vector così da poterlo gestire con gli opportuni indici...
    ma oltre a non funzionarmi e presentarmi caratteri strani sulla finestra dos...
    mi viene rilevato come virus dal mio antivirus COMODO
    E per la precisione quando lo eseguo mi viene questo msg di warning riferito al .cpp in questione:

    DRP-AGENT.EQ.(cidiglia)B@18027792

    Come può essere???



    Grazie oregon


  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Grazie oregon o nessuno se preferisci ;)

    Beh, se includi più linee nel ciclo while, almeno usa le parentesi ...

    Originariamente inviato da freetom
    codice:
      while (getline(read_write, elem, ',')) 
      {
        cout << elem << endl;  
        numeri.push_back(elem);
      }
    Il resto del codice (il ciclo for che visualizza sempre i primi due elementi) non mi è chiaro ...

    Il problema del virus riguarda il tuo PC.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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

    ci sono riuscito oregon grazie

    E adesso nemmeno l'alert dell'antivirus viene.
    E' bastato aggiungere come hai detto tu le parentesi graffe.

    Grazie 1000 Maestro

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: ci sono riuscito oregon grazie

    Originariamente inviato da freetom
    Grazie 1000 Maestro
    Di nulla ... ma che maestro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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

    di nuovo in panne...

    Con questa aggiunta...

    codice:
     if (numeri.size() !=0) {
      
      switch(numeri.size())
      
      {
      case 2: 
    
      string num1 = numeri[0];
      string num2 = numeri[1];
    
      break;
      case 4:
         
      string num1 = numeri[0];
      string num2 = numeri[1];  
      string num3 = numeri[2];
      string num4 = numeri[3];
    
      break;
      case 6:
    
      string num1 = numeri[0];
      string num2 = numeri[1];  
      string num3 = numeri[2];
      string num4 = numeri[3];     
      string num5 = numeri[4];
      string num6 = numeri[5];
    
      break;
      case 8:
    
      string num1 = numeri[0];
      string num2 = numeri[1];  
      string num3 = numeri[2];
      string num4 = numeri[3];     
      string num5 = numeri[4];
      string num6 = numeri[5];     
      string num7 = numeri[6];
      string num8 = numeri[7];
    
      break;
      case 10:
    
      string num1 = numeri[0];
      string num2 = numeri[1];  
      string num3 = numeri[2];
      string num4 = numeri[3];     
      string num5 = numeri[4];
      string num6 = numeri[5];     
      string num7 = numeri[6];
      string num8 = numeri[7];
      string num9 = numeri[8];
      string num10 = numeri[9];
      }
           
    
      cout << num1;
      cout << "\n";
      cout << num2;
      cout << "\n";
      cout << num3;
      cout << "\n";
      cout << num4;
      cout << "\n";
      cout << num5;
      cout << "\n";
      cout << num6;
      cout << "\n";
      cout << num7;
      cout << "\n";
      cout << num8;
      cout << "\n";
      cout << num9;
      cout << "\n";
      cout << num10;
     
    
    cin.get();
    
    }
    Perchè mi impedisce l'esecuzione del programma... e mi segnala la riga

    case 4:

    con questo alert:

    splittiamostringhe-4.cpp jump to case label


  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma a cosa dovrebbe servire tutto questo?

    Se hai già i dati nel vector, perché tutto questo ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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

    perchè non so a priori quanti elementi popoleranno il vector...

    Originariamente inviato da oregon
    Ma a cosa dovrebbe servire tutto questo?

    Se hai già i dati nel vector, perché tutto questo ?
    Possono essere minimo 0 elementi e max 10 elementi

    e ho provato a fare semplicemente con il cod senza aggiunta ma mi si blocca il programma non appena ho nel file txt da leggere più di una riga o 0 righe appunto

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

    forse ho capito dove è l'inghippo ma non so come risolverlo...

    codice:
     string elem;
      while (getline(read_write, elem, ',')) 
      
      {
     
     
     cout << "#";
     cout << elem;
     cout << "#";
      
      numeri.push_back(elem);
    
      }
    evidenziando con il simbolo cancelletto i limiti di ciascun elem prelevato da ciascuna riga(stringa) mi accordo che ho un output di questo tipo:

    #1##2
    81##82
    #

    quindi il vector numeri mi si popola in questo caso di valori abnormi... quali:
    1,null,2ritornoacapo81,null,82ritornoacapo

    mentre dovrei averlo così:

    #1#2#81#82#

    e il vector numeri mi si dovrebbe popolare di valori ben definiti... quali:

    1,2,81,82

    come posso ripristinare il tutto? sapendo che il file filedaleggere.txt contiene secondo l'esempio:

    1,2
    81,82


    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.