home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / esempi / File / char.c next >
C/C++ Source or Header  |  1997-03-08  |  2KB  |  74 lines

  1. #include <stdio.h>
  2. /* 
  3.  * Esempio di gestione file, lettura caratteri, uso degli
  4.  * argomenti in linea: legge un file [say f] [argimento passato al main]
  5.  * sostituisce il carattere OLD con NEW [macrodef].
  6.  * Se chiamato con -f  aggiunge alcune parole all'inizio delle frasi;
  7.  * parole definite in una tabella ptab e selezionate in modo casuale.
  8.  * Salva il tutto in f.a
  9. */
  10.  
  11. #define PTABDIM 3
  12. #define EOL 10
  13. #define OLD 'r'        /* ...un tocco di nobilta' */
  14. #define NEW 'v'
  15. #define TAB 3
  16.  
  17. int minuscolo(int c)
  18. {  
  19.  if ( c >='A' && c <='Z') return(c-'A'+'a');
  20.  else return c;
  21. }
  22.  
  23. void copy(char *s, char *t)
  24. {
  25.   while (*s++=*t++);
  26.  
  27. void append(char *s, char *t)
  28. {
  29.   for (;*s;s++); 
  30.   while(*s++=*t++);  
  31. }
  32.  
  33. main(int argc,char *argv[])
  34. {
  35.  
  36.  FILE *in,*out; 
  37.  char s[30];
  38.  char *ptab [TAB]={"Non sia mai","Non si divebbe ma","Ebbene"}; 
  39.  int c,d; 
  40.  int flag=0;
  41.  int i=0;
  42.  int nl=0;
  43.  
  44.  if (argc<2) {printf("\n Almeno un parametro!\n");return(0);};  
  45.  if (flag=(*argv[1]=='-')) copy(s,(argv[1]+1)); 
  46.  else copy(s,argv[1]);
  47.          /* oppure: copy(s,(argv[1]+(flag=(*argv[1]=='-'))); */
  48.  if (!(in=fopen(s,"r"))) 
  49.              {printf("\n Oh ma che file mi dai?\n");return(0);}
  50.  strcat(s,".a");
  51.  if (!(out=fopen(s,"w"))) return(0);  
  52.  while ((c=getc(in))!=EOF) 
  53.   {
  54.     if (c==OLD) putc(NEW,out);
  55.     else if (flag && c=='.') 
  56.      {
  57.        putc(c,out);
  58.        while (((c=getc(in))=='\n') || (c==' ')) if (c=='\n') nl=1;
  59.        if (nl) putc('\n',out);
  60.        else    putc(' ',out);              
  61.        if (c!=EOF)
  62.          { 
  63.            fprintf(out,"%s ",ptab[i%TAB]);
  64.            putc(minuscolo(c),out);
  65.            i++;  /* incremento ...senza senso */
  66.          }; 
  67.      }
  68.     else putc(c,out);
  69.   };  
  70.  fclose(in);
  71.  fclose(out); 
  72. }
  73.