Problema con File di testo (rimozione spazi)

di il
8 risposte

Problema con File di testo (rimozione spazi)

Salve, oggi mi è stato assegnato questo problema: "Scrivi un programma che legge un file di testo e crei un nuovo file che abbia il contenuto del primo senza gli spazi".
Credo di averlo risolto però ho dei dubbi sull' efficacia e la semplicità del codice... Potreste darmi una mano a capire se è tutto giusto?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTR 81
int main(void)
{
	FILE *puntaFile, *pFile;
	int I, J, N, continua, Frasi;
	char buffer[MAXSTR+1], buffer1[MAXSTR+1], word[25], word1[25];
	printf("\nVuoi creare il file?(1 per creare, 0 per leggere ed eseguire l'operazione richiesta)");
	scanf("%d", &continua);
	if(continua==1)
		{
			printf("Inserisci il nome del file sorgente da creare: ");
			scanf("%s", word);
			printf("Inserisci il numero di frasi: ");
			scanf("%d", &Frasi);
			puntaFile = fopen(word, "w");		
			if(puntaFile!=NULL)
				{
					for(I=0;I<Frasi;I++)
						{
							printf("Inserisci la frase: ");
							fflush(stdin);							
							gets(buffer);
							fputs(buffer, puntaFile);
							fputc((int) '\n', puntaFile);
						}
			fclose(puntaFile);				
				}
			else
				{
					printf("Errore! Il file non puo' essere aperto!\n");
					exit(1);
				}	
		}
	else
		{
			printf("Inserisci il nome del file sul quale effettuare la rimozione degli spazi: ");
			scanf("%s", word);
			printf("Inserisci il nome del nuovo file: ");
			scanf("%s", word1);
			puntaFile = fopen(word, "r");
			pFile = fopen(word1, "w");
			if(puntaFile!=NULL && pFile!=NULL)
				{
					while(fgets(buffer, MAXSTR, puntaFile)!=NULL)
						{
							N=strlen(buffer);
							for(I=0, J=0; I<N; I++)
								{
									if(buffer[I]!=' ')
										buffer1[J++]=buffer[I];
									buffer1[J] = '\0';
								}
							fputs(buffer1, pFile);
						}
				}
		}
	fclose(puntaFile);				
	fclose(pFile);					
	
	pFile = fopen(word1, "r");				
	if(pFile!=NULL)
		{
			while(fgets(buffer, MAXSTR, pFile)!=NULL)
				printf("%s", buffer);					
			fclose(pFile);
		}
}
I miei dubbi riguardano soprattutto questo else:
	else
		{
			printf("Inserisci il nome del file sul quale effettuare la rimozione degli spazi: ");
			scanf("%s", word);
			printf("Inserisci il nome del nuovo file: ");
			scanf("%s", word1);
			puntaFile = fopen(word, "r");
			pFile = fopen(word1, "w");
			if(puntaFile!=NULL && pFile!=NULL)
				{
					while(fgets(buffer, MAXSTR, puntaFile)!=NULL)
						{
							N=strlen(buffer);
							for(I=0, J=0; I<N; I++)
								{
									if(buffer[I]!=' ')
										buffer1[J++]=buffer[I];
									buffer1[J] = '\0';
								}
							fputs(buffer1, pFile);
						}
				}
		}
Vi ringrazio anticipatamente.

8 Risposte

  • Re: Problema con File di testo (rimozione spazi)

    Se il compito è solo quello richiesto, perché tutto questo codice? Bastano poche righe ... leggi un carattere e se non è uno spazio lo scrivi fino alla fine del file
  • Re: Problema con File di testo (rimozione spazi)

    E perché leggi le frasi da tastiera?
  • Re: Problema con File di testo (rimozione spazi)

    oregon ha scritto:


    Se il compito è solo quello richiesto, perché tutto questo codice? Bastano poche righe ... leggi un carattere e se non è uno spazio lo scrivi fino alla fine del file
    Ho scritto tutto questo codice perchè mi è stato chiesto di creare una sorta di switch iniziale(con continua 0 o 1).
    Se continua è 1 allora creo il file, se è 0 chiedo su quale file operare e quindi eseguo direttamente il compito.
    Ho iniziato da poco i file quindi non sono molto pratico (4° superiore), che intendi con lo scrivi alla fine del file?
  • Re: Problema con File di testo (rimozione spazi)

    StandardOil ha scritto:


    E perché leggi le frasi da tastiera?
    Se intendi il perchè creo io il file con le frasi è perchè mi è stato richiesto; se invece ti riferisci al fatto che inserisca il numero di frasi da tastiera è perchè non saprei come fare a fare in maniera diversa
  • Re: Problema con File di testo (rimozione spazi)

    Beh, farebbe sempre comodo conoscere 'tutte' le prescrizioni per un programma da scrivere


    Comunque adesso è chiaro, grazie
  • Re: Problema con File di testo (rimozione spazi)

    StandardOil ha scritto:


    Beh, farebbe sempre comodo conoscere 'tutte' le prescrizioni per un programma da scrivere


    Comunque adesso è chiaro, grazie
    Quindi cosa consiglieresti di migliorare?
  • Re: Problema con File di testo (rimozione spazi)

    Allora ... tu hai scritto

    "Scrivi un programma che legge un file di testo e crei un nuovo file che abbia il contenuto del primo senza gli spazi"

    gli switch, le domande e tutto quello che hai detto non c'entra nulla.

    Semplicemente

    apri il file in lettura e il file in scrittura
    leggi un carattere dal file in lettura
    se diverso da spazio, scrivi il carattere nel file in scrittura
    continui le letture/scritture fino alla fine del file
    chiudi i due file

    Poche righe
  • Re: Problema con File di testo (rimozione spazi)

    oregon ha scritto:


    Allora ... tu hai scritto

    "Scrivi un programma che legge un file di testo e crei un nuovo file che abbia il contenuto del primo senza gli spazi"

    gli switch, le domande e tutto quello che hai detto non c'entra nulla.

    Semplicemente

    apri il file in lettura e il file in scrittura
    leggi un carattere dal file in lettura
    se diverso da spazio, scrivi il carattere nel file in scrittura
    continui le letture/scritture fino alla fine del file
    chiudi i due file

    Poche righe
    Ho modificato l'else e dovrebbe essere così:
    else
    		{
    			printf("Inserisci il nome del file sul quale effettuare la rimozione degli spazi: ");
    			scanf("%s", word);
    			printf("Inserisci il nome del nuovo file: ");
    			scanf("%s", word1);
    			puntaFile = fopen(word, "r");
    			pFile = fopen(word1, "w");
    			if(puntaFile!=NULL && pFile!=NULL)
    				{
    					while((c = fgetc(puntaFile)) != EOF)
    						{
    							if(c!= ' ')
    								fputc(c, pFile);
    						}
    				}
    		}
    	fclose(puntaFile);				
    	fclose(pFile);			
    Funziona, grazie mille.
Devi accedere o registrarti per scrivere nel forum
8 risposte