Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C/C++] Modifica file di testo.

    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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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 ...?

  3. #3
    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...
    codice:
    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++...

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.