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

    [c++] Dovrei togliere da questo tipo di dato gli spazi iniziali e finali...

    token2.at(0)

    Ad esempio se contiene:

    " casa "

    dovrei ottenere solo

    "casa" (senza spazi)


    come posso fare?

    Grazie


  2. #2
    prova qualcosa del genere:
    codice:
    std::string astring(" Test Test Test ");
    std::remove(astring.begin(), astring.end(), ' ');
    oppure dovrebbe esserci la funzione trim:
    trim(stringa)

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

    grazie ma...

    Originariamente inviato da fermat
    prova qualcosa del genere:
    codice:
    std::string astring(" Test Test Test ");
    std::remove(astring.begin(), astring.end(), ' ');
    oppure dovrebbe esserci la funzione trim:
    trim(stringa)

    codice:
    	string line;
    	getline(f, line);
    	
    	while(!f.fail())
    	{
                        
            
            //RIMUOVO DA LINE I RITORNI A CAPO
            
    std::string astring(line);
    std::remove(astring.begin(), astring.end(), '\n');
    perchè questo mi da il seguente errore:

    Nothing to be done for `all'.

    quando lo compilo ed eseguo? Se lo compilo e basta non da nessun errore segnalandomi done.

    Grazie!

    ps: L'analogo esempio...

    codice:
    string stringa = "\nTest\nTest\nTest";
    std::string astring(stringa);
    std::remove(astring.begin(), astring.end(), '\n');
    
    cout << astring;
    cin.get();
    Invece funziona perfettamente!



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

    Re: grazie ma...

    Originariamente inviato da freetom
    codice:
    	string line;
    	getline(f, line);
    	
    	while(!f.fail())
    	{
                        
            
            //RIMUOVO DA LINE I RITORNI A CAPO
            
    std::string astring(line);
    std::remove(astring.begin(), astring.end(), '\n');
    perchè questo mi da il seguente errore:

    Nothing to be done for `all'.

    quando lo compilo ed eseguo? Se lo compilo e basta non da nessun errore segnalandomi done.

    Grazie!

    ps: L'analogo esempio...

    codice:
    string stringa = "\nTest\nTest\nTest";
    std::string astring(stringa);
    std::remove(astring.begin(), astring.end(), '\n');
    
    cout << astring;
    cin.get();
    Invece funziona perfettamente!


    Non importa + grazie

    Non so come mai (ho lasciato tutto così) ma adesso funziona!


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

    Adesso ho questo problema finale analogo...

    Con questo cod:

    codice:
    #include <iostream> 
    #include <fstream> 
    #include <string> 
    #include <sstream> 
    #include <windows.h>
    
    using namespace std; 
    
    int main () { 
        
            
    //ATTESA FILE DESIDERATO...
        
    FILE *in;
    do{
    in=fopen("filescremato5.txt", "r");
    if(in==NULL)
    Sleep(1000);
    }while(in==NULL);
    //seguito
    Sleep(1000);
    
    //FINE ATTESA...
    
        ofstream out_file("ambate-primostep.txt"); 
    
        for (int i=0; i<5; i++) 
        { 
            ostringstream filename; 
            string line; 
    
            filename << "filescremato" << i << ".txt"; 
            ifstream file(filename.str().c_str());     
         
            while(getline(file, line, '\n')) 
            { 
                
    std::string astring(line);
    std::remove(astring.begin(), astring.end(), ' ');
                
                out_file << line << "\n";             
            }         
                     
            if(i == 2){ //<- 1 
                out_file.seekp(-1, ios::end); 
                out_file << '\n'; 
            }         
                     
            file.close(); 
        } 
         
        out_file.close(); 
    }

    ottengo queste righe a valore unico:

    25
    45
    53
    59
    35
    21
    31
    40
    63

    questo su file TXT perchè se invece incollo lo stesso contenuto su file .rtf

    prende la seguente forma:

    25
    45
    53
    59
    35 21
    31
    40
    63

    ovvero 35 e 21 risultano erronamente sulla stessa linea intervallati da uno spazio nonostante il tentativo di pulizia fatto all'interno del codice...

    Qualcuno saprebbe dirmi come mai il programma continua ad ignorare la pulizia della linea?

    Grazie!


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

    Anche qui non importa + grazie

    L'errore era in un altro file che generava caratteri "invisibili" di troppo

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

    sto di nuovo impazzendo per questo nuovo caso...

    87,46,57,90,17
    ,
    48,17,15,29,52
    ,
    46,5,9,38,50
    ,
    75,88,44,68,31
    ,
    90,45,84,69,8
    ,
    11,81,9,60,21
    ,
    90,33,3,16,23
    ,
    37,86,19,21,60
    ,
    69,66,84,1,46
    ,
    68,35,88,19,63
    ,
    47,32,39,58,51
    ,
    88,27,33,2,44
    ,
    4,30,25,5,46
    ,
    30,5,86,53,50
    ,
    52,36,76,16,25
    ,


    dovrebbe essere:

    87,46,57,90,17,
    48,17,15,29,52,
    46,5,9,38,50,
    75,88,44,68,31,
    90,45,84,69,8,
    11,81,9,60,21,
    90,33,3,16,23,
    37,86,19,21,60,
    69,66,84,1,46,
    68,35,88,19,63,
    47,32,39,58,51,
    88,27,33,2,44,
    4,30,25,5,46,
    30,5,86,53,50,
    52,36,76,16,25,

    il codice originante il file con l'errore è:

    codice:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <windows.h>
    
    using namespace std;
    
    #define LINEE 15
    
    int main()
    {
        
    
    string line;    
        
    //ATTESA FILE DESIDERATO...
        
    FILE *in;
    do{
    in=fopen("ESTRAZIONI.txt", "r");
    if(in==NULL)
    Sleep(1000);
    }while(in==NULL);
    //seguito
    Sleep(1000);
    
    //FINE ATTESA...
        
    	ifstream f;
    	f.open("ESTRAZIONI.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-ULTIME-15.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);
    	}
    
    	
    	getline(f, line);
    	getline(f, line);
    	while(!f.fail())
    	{
                        
            
    //RIMUOVO DA LINE GLI SPAZI e I RITORNI A CAPO
          
    std::string astring(line);
    std::remove(astring.begin(), astring.end(), ' ');
    std::remove(astring.begin(), astring.end(), '\n');
    
    
    //cout << line;
    //cin.get();
            
            //---------------------------------            
                        
            //scrivo su file ogni linea rilevata
    		
                    fout << line;
    		fout << ",";
    		fout << "\n";
    		//----------------------------------
    		
                    cout << "*";
    		cout << line;
    		cout << "*";
    		
    		cin.get();
    		
    		getline(f, line);
    		
    		//cin.get();
    	}
    
    	f.close();
    
    	//return 0;
    }
    Dove è il bug che inserisce il ritorno a capo non voluto con la virgola???


    Grazie


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

    con notepad ++ evidenzio questi simboli...

    87,46,57,90,17CRLF
    ,CRLF
    48,17,15,29,52

    io in sostanza con la pulizia x ogni riga dovrei togliere quelli... in grassetto (invisibili sia su txt che in rtf)

    con

    //RIMUOVO DA LINE I SIMBOLI STRANI...

    std::string astring(line);
    std::remove(astring.begin(), astring.end(), 'CRLF');

    ma così ovviamente non funziona come posso trasformare il simbolo "nascosto" CRLF in qualcosa di equivalente ma comprensibile per il programma?

    Grazie agli esperti


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.