giovedì 12 febbraio 2015

Modifica di un file di testo iscritto in C attraverso dalla line di commando DOS

/*Il programma sviluppata in C  Usando la line di comando ( argc e argv)
Il primo parametro argc di tipo int `e il contatore del numero di “argomenti” o “opzioni” passati al programma quando questo viene invocato sia dalla linea di comando che da un altro programma. Questi argomenti sono chiamati argomenti di linea (command line arguments) perch´e sono dati di seguito al nome dell’eseguibile del programma sulla stessa linea di comando. Il secondo parametro argv `e un array di puntatori a stringhe contenenti gli argomenti di linea passati al programma. La prima stringa argv[0] contiene il nome del programma o, se questo non `e disponibile, la stringa vuota.*/
---------------------------------------------------------------------------------------------------------------
Il contiene la stringa --> sotto quando viene esecuito dalla line di comando la stringa dovrebbe essere trasformata quello indica in basso con colori bule .

QUEL RAMO del lago di Como, che volge a mezzogiorno, tra due CATENE non interrotte di MONTI, tutto a seni e a golfi, a seconda dello sporgere E DEL RIENTRARE di quelli, vien, quasi

scambia TESTO.TXT MODIF.TXT ae
 ed il file TESTO.TXT
 contenesse i seguenti dati:
allora il programma dovrebbe produrre il seguente file MODIF.TXT perché dovrebbe sostituire tutte le lettere A (a) con E (e) e tutte le lettere E (e) con A (a):

QUAL REMO dal lego di Como, cha volga e mazzogiorno, tre dua CETANA non intarrotta di MONTI, tutto e sani a e golfi, e saconde dallo sporgara A DAL RIANTRERE di qualli, vian, quesi

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main( int argc, char *argv[] )
{
const int MAX=200; /* Variabile costante di ti po intero dimensione MAX=200 per che indica
il massimo di numero di carattere di usare*/
char frase[200+1];// array di caratteri con dimensione 200+1
char c[200+1];  // secondo array di caratteri dimensione 200+1 che raccoglia il contenuto
//di senconda file chiamata modif

FILE *scambia; // apri il canale di file di scambia
FILE*modif;    // la seconda canale se modif che contine stringa modificata

        if ( argc != 2 && argc != 3 )
{
printf("ERRORE di parametri\n") ;
exit(1) ;
}
 /* apertura del file  in modalita lettura*/
scambia= fopen(argv[1], "r") ;

if (scambia==NULL ) // nel caso dalla mancanza di parametri stampa ERRORI
{
printf("impossibile aprire il file %s\n", argv[1]) ;
exit(1) ;
}
if (argc==2) // Se il argc ugule a 2 procede
{
/*La funzione fgets ha tre argomenti: il primo è un vettore di
caratteri in cui va memorizzata la linea del file di testo;
il secondo è il numero massimo di caratteri che si vogliono
mettere in questa stringa; il terzo è un descrittore di file,
 e indica da quale file si vuole leggere la stringa*/

while ( fgets(frase,MAX,scambia)!= NULL)

{
           
/* ciclo iterazione for per fare scorrere la stringa
usand la funzione La funzione strlen() calcola la lunghezza della stringa frase,
(inteso come il numero di caratteri dell'array puntato da frase*/  
           
        for(int i=0;i<strlen(frase);i++)

{
/* if concatenata per controlli l' indice di for se la stringa
 contine caratteri miuscola e maiuscol(A-a)(e-E) scambiarle tra di loro*/
if(frase[i]=='a')
frase[i]='e';
else if(frase[i]=='A')
frase[i]='E';
else if(frase[i]=='e')
frase[i]='a';
else if(frase[i]=='E')
frase[i]='A';

   }
 printf("%s\n",frase);
// una volta che elaborato la stringa, aper il secondo file per copiarle
     {
             modif=fopen("modif.txt","w"); // apre il secondo file in modalita scrittura
                     fscanf(modif,"%s\t",c); /*Le funzioni fscanf() e fprintf() vengono utilizzate per la
lettura e la scrittura su file. Il loro comportamento
                                              è lo stesso delle funzioni scanf() */
                       fprintf(modif,"%s ",frase);
                          fclose(modif);  // chiusura dal primo file
                           // printf("%s",frase); // stampa la stringa elaborata
                              fclose(scambia); // chiusura dal secondo FILE
  }
          }
                       system("pause");
}
}

La modifica di un file di testo in C

/*Si desidera sviluppare un programma in linguaggio C per la modifica di un file di testo. La modifica consiste nel sostituire – scambiandoli tra loro – due caratteri alfabetici dati. In particolare, tutte le occorrenze del primo carattere dovranno essere sostituite dal secondo e viceversa. La sostituzione deve avvenire mantenendo la forma (maiuscola o minuscola) della lettera originaria. Il programma riceve sulla linea di comando tre parametri: il nome del file di testo da elaborare, il nome di un secondo file di testo nel quale salvare il risultato ed una stringa di 2 caratteri che specifica i caratteri da scambiare.
*/



#include<stdlib.h>
#include<stdio.h>
#include <string.h>


int main() /* Difinizione dal Faile
Un file e un insieme di dati omogenee,memmorizzata in modo permanente su
memoria di massa in modo equenziale */
{
  FILE *scambia; //  puntatore al PRIMO file canale (il FILE originale dove contiena le frase)
  FILE*seco;     // il secondo FILE dove viene salvato le frase una volta modificata
  const int MAX=200;  /* Variabile costante di ti po intero dimensione MAX=200 per che indica
                       il massimo di numero di carattere di usare*/
  char frase[200+1];    // array di caratteri con dimensione 200
  char c[200+1];
     /* secondo array di caratteri dimensione 200+1 che raccoglia
  salva il contenuto di secondo FILE una volta modificata*/




/* apre il file da leggere (L'apertura di un file viene realizzata mediante la
funzione fopen */
  if(!(scambia=fopen("primo.txt","r")))

      {    
         printf("Errore in apertura del file da leggere");
         exit(1);  // nel caso di errori di apertura
            }
/*La funzione fgets ha tre argomenti: il primo è un vettore di
 caratteri in cui va memorizzata la linea del file di testo;
il secondo è il numero massimo di caratteri che si vogliono
mettere in questa stringa; il terzo è un descrittore di file,
 e indica da quale file si vuole leggere la stringa*/      
       while ( fgets(frase,MAX,scambia)!= NULL )

{
/* ciclo iterazione for per fare scorrere la stringa
  usand la funzione La funzione strlen() calcola la lunghezza della stringa frase,
(inteso come il numero di caratteri dell'array puntato da frase*/

    for(int i=0;i<strlen(frase);i++)

    {
/* if concatenata per controlli l' indice di for se la stringa
 contine caratteri miuscola e maiuscol(A-a)(e-E) scambiarle tra di loro*/
  if(frase[i]=='a')
      frase[i]='e';
  else if(frase[i]=='A')
      frase[i]='E';
  else if(frase[i]=='e')
      frase[i]='a';
  else if(frase[i]=='E')
      frase[i]='A';
        }
            seco=fopen("secondo.txt","w"); // apre il secondo file in modalita scrittura
                     fscanf(seco,"%s\t",c); /*Le funzioni fscanf() e fprintf() vengono utilizzate per la
lettura e la scrittura su file. Il loro comportamento
                                              è lo stesso delle funzioni scanf() */
                       fprintf(seco,"%s ",frase);
                          fclose(seco);  // chiusura dal primo file
                            printf("%s",frase); // stampa la stringa elaborata
                              fclose(scambia); // chiusura dal secondo FILE
 
                               }

                                 }