token2.at(0)
Ad esempio se contiene:
" casa "
dovrei ottenere solo
"casa" (senza spazi)
come posso fare?
Grazie
![]()
token2.at(0)
Ad esempio se contiene:
" casa "
dovrei ottenere solo
"casa" (senza spazi)
come posso fare?
Grazie
![]()
prova qualcosa del genere:
oppure dovrebbe esserci la funzione trim:codice:std::string astring(" Test Test Test "); std::remove(astring.begin(), astring.end(), ' ');
trim(stringa)
Originariamente inviato da fermat
prova qualcosa del genere:
oppure dovrebbe esserci la funzione trim:codice:std::string astring(" Test Test Test "); std::remove(astring.begin(), astring.end(), ' ');
trim(stringa)
perchè questo mi da il seguente errore: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');
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...
Invece funziona perfettamente!codice:string stringa = "\nTest\nTest\nTest"; std::string astring(stringa); std::remove(astring.begin(), astring.end(), '\n'); cout << astring; cin.get();![]()
![]()
![]()
![]()
Non importa + grazieOriginariamente inviato da freetom
perchè questo mi da il seguente errore: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');
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...
Invece funziona perfettamente!codice:string stringa = "\nTest\nTest\nTest"; std::string astring(stringa); std::remove(astring.begin(), astring.end(), '\n'); cout << astring; cin.get();![]()
![]()
![]()
![]()
Non so come mai (ho lasciato tutto così) ma adesso funziona!![]()
![]()
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!
![]()
L'errore era in un altro file che generava caratteri "invisibili" di troppo![]()
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 è:
Dove è il bug che inserisce il ritorno a capo non voluto con la virgola???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; }![]()
Grazie
![]()
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 funzionacome posso trasformare il simbolo "nascosto" CRLF in qualcosa di equivalente ma comprensibile per il programma?
Grazie agli esperti
![]()