Hack (Ex-Member)
Newbie
Messaggi: 14
Iscritto: 09/05/2006
|
Ciao a tutti.
Io ho un file di testo e voglio cercare al suo interno tutte le parti che sono contenute all'interno dei commenti del C.
Esempio:
Codice sorgente - presumibilmente C/C++ |
testo
qualsiasi
/* commento del C che dovrà essere eliminato */
|
Quali consigli mi date per gestire al meglio questo tipo di operazione?
Io pensavo di leggere carattere per carattere il file passato, e di memorizzare in una variabile temporanea 1 se il carattere precedente è una / o 0 altrimenti.
|
|
Fr3d3R!K (Ex-Member)
Expert
Messaggi: 589
Iscritto: 17/08/2006
|
non è una cattiva idea...cerca carattere per carattere i caratteri (scusa il gioco di parole) /* e ogni qualvolta lo trovi cancelli da li fino a *\
ciao
|
|
Hack (Ex-Member)
Newbie
Messaggi: 14
Iscritto: 09/05/2006
|
Ok. Il fatto è che il file passato può essere un sorgente scritto in C di un software e oltre ai commenti (da eliminare), nella forma che ho presentato prima, può anche avere i caratteri / e * all'interno di un printf (che non sono da eliminare).
Esempio:
Codice sorgente - presumibilmente C/C++ |
/* commento da eliminare */
int x;
x = f1();
printf ("/* questo commento all'interno del printf non deve essere eliminato */ Risultato = %d", x);
|
Questo costituisce un caso particolare più difficile da gestire.
Come potrei fare?
|
|
4x4lu5 (Ex-Member)
Rookie
Messaggi: 41
Iscritto: 16/08/2006
|
Ciao, te la butto li poi vedi tu se puo esserti di aiuto
Potresti implementare una struttura condizionale (a me verrebbe in mente uno switch, x es) che controlla se la scritta nn è 1 printf e in qual caso nn ti cancella niente fino a che nn si chiude la parentesi
spero di essermi spiegato, tipo in pseudocodice
switch c
case 'p':
if (i==0)
i++;
case 'r':
if (i==1)
i++;
case 'i':
if (i==2)
i++;
e cosi via,
alla fine metti tipo
case 'f':
if (i==5)
printf=1;
nel caso di default metti i=0 e controlli che l'istanza di ql che leggi sia correttamente 1 stringa printf e poi qnd printf è 1 controlli solo le parentesi fino a che il numero di parentesi aperte sia uguale a quelle chiuse, credo che così dovrebbe andare (te lo auguro) a presto
|
|
Fr3d3R!K (Ex-Member)
Expert
Messaggi: 589
Iscritto: 17/08/2006
|
dimentchi i break alla fine di ongi case altrimenti considerererà solo il default
|
|
4x4lu5 (Ex-Member)
Rookie
Messaggi: 41
Iscritto: 16/08/2006
|
dimentichi ql che ho scritto prima del testo:
"in pseudocodice"
e nn x polemizzare
a presto
Ultima modifica effettuata da 4x4lu5 il 11/10/2006 alle 2:19 |
|
Fr3d3R!K (Ex-Member)
Expert
Messaggi: 589
Iscritto: 17/08/2006
|
ti assicuro che non volevo polemizzare...ammetto di non aver letto la parola pseudocodice semplicemente siccome è scritto tutto in codice ho aggiunto un pezzettino nel caso il nostro amico avesse voluto provare il tuo codice...non avevo fini oscuri
p.s. scusate per il tentato omicidio alla linguaggio italiana
Ultima modifica effettuata da Fr3d3R!K il 12/10/2006 alle 21:38 |
|
4x4lu5 (Ex-Member)
Rookie
Messaggi: 41
Iscritto: 16/08/2006
|
certo, neanche io volevo polemizzare
a presto
|
|
Hack (Ex-Member)
Newbie
Messaggi: 14
Iscritto: 09/05/2006
|
Grazie mille delle risposta.
Ho capito lo switch che mi proponi di fare, ma come faccio a vedere poi la chiusura dell'istruzione printf?
Potrebbe darsi che all'interno del printf ci sia una parentesi chiusa che però viene stampata a video e non corrisponde alla vera fine dell'istruzione.
|
|