Beh, in effetti il problema "primitivo" e' che stai imparando il C in 3 giorni su un forum ... tutti i nodi vengono al pettine prima o poi ...
La memcpy la utilizzi come descritto in
http://www.cplusplus.com/reference/c...string/memcpy/
Beh, in effetti il problema "primitivo" e' che stai imparando il C in 3 giorni su un forum ... tutti i nodi vengono al pettine prima o poi ...
La memcpy la utilizzi come descritto in
http://www.cplusplus.com/reference/c...string/memcpy/
No MP tecnici (non rispondo nemmeno!), usa il forum.
while((found2 = strpbrk(found, "\t")) != NULL) {
*found2 = '\n';
found2 = (char*) ptr2;
}
solo che adesso mi è rimasto da fare questa piccola modifica:
in sostanza al posto della \t che non funzia devo mettere l'equivalente di 16 spaziettini...
in modo che le combinazioni mi vadano una sotto l'altra...
il primo problema di togliere la virgola all'inizio l'ho risolto....![]()
Mi resterebbe ancora quello di aggiungere alla fine di ciascuna stringa un ";"
Grazie
Un es. del mio output attuale... :
58,22,47,49,69 (sedici spazi) 18,77,33,62,19 (sedici spazi) 68,65,41,28,67 (sedici spazi) 76,55,48,85,71
mentre io dovrei aver lo stesso uguale a:
58,22,47,49,69;
18,77,33,62,19;
68,65,41,28,67;
76,55,48,85,71;
![]()
Se per una ogni linea letta utilizzi una stringa chiamata
s
e fai
e poi scrivi su filecodice:memcpy(s, s+14, 15); for(x=2; x<14; x+=3) s[x]=',';
hai risolto ... ovviamente il tutto ripetuto per ogni linea del file da leggere ...codice:file << s << ';' << endl;
No MP tecnici (non rispondo nemmeno!), usa il forum.
il nuovo output mi appare così:
’|,93,/0,/0, BA|1939/01/07 BA 58 22 47 49 69
;
A|,93,/0,/1, BA|1939/01/14 BA 18 77 33 62 19
;
A|,93,/0,/2, BA|1939/01/21 BA 68 65 41 28 67
;
A|,93,/0,/2, BA|1939/01/28 BA 76 55 48 85 71
;
A|,93,/0,/0, BA|1939/02/04 BA 70 2 20 85 75
;
A|,93,/0,/1, BA|1939/02/11 BA 82 81 16 52 77
;
A|,93,/0,/1, BA|1939/02/18 BA 51 65 6 29 81
;
A|,93,/0,/2, BA|1939/02/25 BA 3 54 79 45 59
;
![]()
![]()
![]()
Ripulisci tutto il codice che usi e postalo, altrimenti come si fa a dirti dove sbagli?
E intendo:
codice che legge dal file
codice che modifica la riga letta
codice che scrive la riga modificata nel nuovo file
P.S. Se nella riga ci sono numeri ad una cifra (esempio 10 3 21 39 4), la stringa viene completata con spazi davanti a tali numeri o no ? In altre parole, la lunghezza della stringa è sempre la stessa o dipende dalla lunghezza dei numeri che ci sono?
No MP tecnici (non rispondo nemmeno!), usa il forum.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main (int argc, char *argv[])
{
ofstream pippo;
pippo.open("estrazioni2.txt", ios:ut);
char s[]="test file";
//SPAZIO PER LETTURA FILE...
int inizio, lunghezza;
inizio=20;
lunghezza=30;
FILE * pFile;
FILE * filetto;
char string [1000];
pFile = fopen ("estrazioni.txt" , "r");
if (pFile == NULL) perror ("Errore");
else {
while(!feof(pFile))
{
fgets(string , 100 , pFile);
if(string[11]=='B' && string[12]=='A')
{
char s[10];
strncpy(s,string+inizio,lunghezza);
memcpy(s, s+14, 15);
for(int x=2; x<14; x+=3) s[x]=',';
cout << s;
pippo << s << ';' << endl;
}
}
}
cout << "Press ENTER to continue..." << endl;
cin.get();
return 0;
}
![]()
![]()
![]()
Dato che ci sei, rispondi anche alla domanda ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
Ho apportato le modifiche
per far funzionare il codice (senza correggere le incongruenze C/C++ ...) a patto che le righe siano del tipocodice:int main (int argc, char *argv[]) { ofstream pippo; pippo.open("estrazioni2.txt", ios::out); FILE *pFile; char string [1000]; pFile = fopen ("estrazioni.txt", "r"); if (pFile == NULL) perror ("Errore"); else { while(!feof(pFile)) { fgets(string , 100 , pFile); string[strlen(string)-1]=0; if(string[11]=='B' && string[12]=='A') { memcpy(string, string+14, 15); for(int x=2; x<14; x+=3) string[x]=','; cout << string << ';' << endl; pippo << string << ';' << endl; } } } cout << "Press ENTER to continue..." << endl; cin.get(); return 0; }
e noncodice:1939/01/28 BA 76 55 48 85 71 1949/01/28 BA 6 5 8 5 1 1959/01/28 BA 76 55 48 85 71
codice:1939/01/28 BA 76 55 48 85 71 1949/01/28 BA 6 5 8 5 1 1959/01/28 BA 76 55 48 85 71
No MP tecnici (non rispondo nemmeno!), usa il forum.
"P.S. Se nella riga ci sono numeri ad una cifra (esempio 10 3 21 39 4), la stringa viene completata con spazi davanti a tali numeri o no ? In altre parole, la lunghezza della stringa è sempre la stessa o dipende dalla lunghezza dei numeri che ci sono?"
si la lunghezza della stringa è sempre la stessa e nel caso di numeri ad una cifra questi prendono sempre il posto della prima parallela a quelle a due cifre...
es:
1939/01/28 BA (spazio uguale) 76(spazio uguale)55(spazio uguale)48(spazio uguale) 85(spazio uguale) 71
1939/02/04 BA(spazio uguale) 70(spazio uguale) 2(spazio uguale) 20(spazio uguale) 85(spazio uguale) 75
![]()
Originariamente inviato da oregon
Ho apportato le modifiche
per far funzionare il codice (senza correggere le incongruenze C/C++ ...) a patto che le righe siano del tipocodice:int main (int argc, char *argv[]) { ofstream pippo; pippo.open("estrazioni2.txt", ios::out); FILE *pFile; char string [1000]; pFile = fopen ("estrazioni.txt", "r"); if (pFile == NULL) perror ("Errore"); else { while(!feof(pFile)) { fgets(string , 100 , pFile); string[strlen(string)-1]=0; if(string[11]=='B' && string[12]=='A') { memcpy(string, string+14, 15); for(int x=2; x<14; x+=3) string[x]=','; cout << string << ';' << endl; pippo << string << ';' << endl; } } } cout << "Press ENTER to continue..." << endl; cin.get(); return 0; }
e noncodice:1939/01/28 BA 76 55 48 85 71 1949/01/28 BA 6 5 8 5 1 1959/01/28 BA 76 55 48 85 71
codice:1939/01/28 BA 76 55 48 85 71 1949/01/28 BA 6 5 8 5 1 1959/01/28 BA 76 55 48 85 71
il file sorgente è così (con tutti i numeri in parallelo indipendentemente dalla errata visualizzazione sottostante che non rispetta il parallelismo...):
1939/01/07 BA 58 22 47 49 69
1939/01/07 FI 27 57 81 43 61
1939/01/07 MI 40 38 57 67 7
1939/01/07 NA 85 44 48 88 55
1939/01/07 PA 73 80 39 38 57
1939/01/07 RM 73 24 4 39 22
1939/01/07 TO 19 43 10 31 27
1939/01/07 VE 9 43 61 14 75
1939/01/14 BA 18 77 33 62 19
1939/01/14 FI 31 47 12 7 80
1939/01/14 MI 35 24 52 90 41
1939/01/14 NA 4 10 36 63 35
1939/01/14 PA 10 77 43 37 35
mentre l'ultimo output risulta questo:
58,22,47,49,69 8 22 47 49 69 ;
18,77,33,62,19 8 77 33 62 19 ;
68,65,41,28,67 8 65 41 28 67 ;
76,55,48,85,71 6 55 48 85 71 ;
70,2 ,0 ,5 ,5 0 2 20 85 75 ;
82,81,16,52,77 2 81 16 52 77 ;
51,65,6 ,9 ,1 1 65 6 29 81 ;
mi chiedo dove io fagiani nel ricreare il file .cpp riportando fedelmente tutte le tue righe![]()
![]()
![]()
TNX
![]()