PDA

Visualizza la versione completa : [C/C++] Modifica file di testo.


Ol3iconfini
28-04-2007, 17:36
Salve, devo modificare un file di testo contenente una sequenza di valori (con segno se negativi) in modo da modificarlo da così:


1 -3 1 5 4 6 8 7 -4 6 8 9 -13 3 0 5 4 6 8 7 4 8 8 -9

a così:


1:1 1:-3 1:1 2:5 2:4 2:6 3:8 3:7 3:-4 4:6 4:8 4:9 1:-13 1:3 1:0 2:5 2:4 2:6 3:8 3:7 3:4 4:8 4:8 4:-9

Per cui credo che dovrei, per ogni riga, leggere una riga da file, memorizzarla in un vettore di caratteri ed aggiungere 1: per i primi tre valori, 2: per i secondi tre valori, 3: per i terzi tre valori, 4 per i quarti tre valori, e da capo da 1: fino a 4: finché non finisce il vettore.
Stavo pensando a un doppio ciclo for (uno che fa un controllo modulo quattro e l' altro che itera per tre valori), ma non so come comportarmi, anche per il problema del segno (il vettore deve perciò essere di caratteri?).

Qualche suggerimento?

oregon
28-04-2007, 17:44
Intanto, mi sembra che ci sia una sola, unica, riga e non molte righe ...

Quindi, stai parlando di un file di testo (.txt) con una sola riga o il file e' organizzato diversamente da come lo hai mostrato?

Perche' non proponi del codice cosi' ne parliamo ...?

Ol3iconfini
28-04-2007, 17:55
No, ci sono più righe, anche di lunghezza diversa (ma sempre multipli di 12), ho mostrato una sola riga.
Si sta parlando di un file .txt, quello che per ora ho tirato giù è molto poco e si limita alla lettura del file e alla memorizzazione su vettore della riga...


include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fda, *fdout;
char *res1;
char bufa[2000000];
char *p1;
int index=0;
if ( argc != 3 ) {
printf("Utilizzo: %s file1 fileout\n",argv[0]);
return 1;
}

fda = fopen (argv[1], "r");
if ( fda == NULL) {
perror("Errore in apertura del file");
exit(1);
}
fdout = fopen (argv[2], "a");
while (1)
{
res1=fgets(bufa, 2000000, fda);
if( res1==NULL )
break;
controllo se il bufa[index] è il meno, in modo da gestire l' incremento per contrare i veri valori e poi dovrei fare qualche controllo di modulo 12 e di controllo sul numero di valori di gruppo (i gruppi sono da 1 a 4).
E poi non so se è giusto la stampa carattere per carattere in questo modo:
fprintf( fdout ,"%i:%c\n",i, bufa[index]);
}

fclose ( fda);
fclose ( fdout);
return 0;
}


Poi non so se è più facile da risolvere in c o in c++...

Loading