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 >
Wrap
C/C++ Source or Header
|
1997-03-08
|
2KB
|
74 lines
#include <stdio.h>
/*
* Esempio di gestione file, lettura caratteri, uso degli
* argomenti in linea: legge un file [say f] [argimento passato al main]
* sostituisce il carattere OLD con NEW [macrodef].
* Se chiamato con -f aggiunge alcune parole all'inizio delle frasi;
* parole definite in una tabella ptab e selezionate in modo casuale.
* Salva il tutto in f.a
*/
#define PTABDIM 3
#define EOL 10
#define OLD 'r' /* ...un tocco di nobilta' */
#define NEW 'v'
#define TAB 3
int minuscolo(int c)
{
if ( c >='A' && c <='Z') return(c-'A'+'a');
else return c;
}
void copy(char *s, char *t)
{
while (*s++=*t++);
}
void append(char *s, char *t)
{
for (;*s;s++);
while(*s++=*t++);
}
main(int argc,char *argv[])
{
FILE *in,*out;
char s[30];
char *ptab [TAB]={"Non sia mai","Non si divebbe ma","Ebbene"};
int c,d;
int flag=0;
int i=0;
int nl=0;
if (argc<2) {printf("\n Almeno un parametro!\n");return(0);};
if (flag=(*argv[1]=='-')) copy(s,(argv[1]+1));
else copy(s,argv[1]);
/* oppure: copy(s,(argv[1]+(flag=(*argv[1]=='-'))); */
if (!(in=fopen(s,"r")))
{printf("\n Oh ma che file mi dai?\n");return(0);}
strcat(s,".a");
if (!(out=fopen(s,"w"))) return(0);
while ((c=getc(in))!=EOF)
{
if (c==OLD) putc(NEW,out);
else if (flag && c=='.')
{
putc(c,out);
while (((c=getc(in))=='\n') || (c==' ')) if (c=='\n') nl=1;
if (nl) putc('\n',out);
else putc(' ',out);
if (c!=EOF)
{
fprintf(out,"%s ",ptab[i%TAB]);
putc(minuscolo(c),out);
i++; /* incremento ...senza senso */
};
}
else putc(c,out);
};
fclose(in);
fclose(out);
}