Newsgroup: it.comp.lang.c
Titolo: scusate se spacco le balle

ma ....
a suo tempo dopo un flame da 21 msg
ed il seguente listato .... (qualcuno puņ provare a compilarlo??)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int a;  /*variabile per contare i pezzi*/
int b;  /*variabile da usare con la precedente*/
FILE* secondofile;
void cerca (const char* stringozza,const FILE* scrivioutput)
{
	int rc;
	char *buffer=malloc(strlen("grep
")+strlen(stringozza)+strlen(" *.txt"));
	if (!buffer) return;
	strcpy (buffer, "grep ");
	strcat (buffer,stringozza);
	strcat (buffer," *.txt");
	rc = system (buffer);
	free (buffer);
	if (rc == -1) printf ("rc funziona....");
	if (rc == 0)
	   scrivioutput = fopen ("gianni.txt","a+");
	   fputs (stringozza, scrivioutput),
	   fputs ("\n",scrivioutput);
	   fclose (scrivioutput);
}
main ()
{
	inserimento ();
	return 0;
}
inserimento ()
{
	char gianni [9];
	char *strupr (char *str);
	printf ("Programma Scansione Barcode\n");
	printf ("Better run on a Pentium Pc!\n");
	printf ("\nDEVI INSERIRE IL RICEVITORE Nų: ");
	printf ("\t\tPremi Control-C per finire!!\n");
	printf ("\nINSERIRE BARCODE\n");
	gets (gianni);
	strupr (gianni);
	if (strlen (gianni) < 8)
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (strlen (gianni) >9)
		printf ("ATTENZIONE! REINSERISCI IL BARCODE!\n"),
		printf ("PREMI INVIO !!!"),
		gets ("\n");
	/*scansione  per controllo errori.....*/
	else if (gianni[0]!='X')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (gianni[1] !='C')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (gianni[2]<'0'|gianni[2]>'9')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (gianni[3]<'0'|gianni[3]>'9')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (gianni[4]<'0'|gianni[4]>'9')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (gianni[5]<'0'|gianni[5]>'9')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (gianni[6]<'0'|gianni[6]>'9')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	else if (gianni[7]<'0'|gianni[7]>'9')
		printf ("il barcode inserito non e' esatto"),
		gets ("\n");
	 cerca (gianni,secondofile);
	 return 0;
la variabile rc mi da sempre zero.
Dovrebbe darmi zero solo quando non trova la stringa e scrive.
Potete aiutarmi???
vi ringrazio in anticipo.
Gianni.

 	printf ("\nDEVI INSERIRE IL RICEVITORE Nø: ");

Marco Guidi

Spero che tu possa apportare alcune correzioni.
si ma non mi sembra il problema piu' importante 
per il momento
quello che voglio ottenere e' che 
rc mi dia il valore corretto (0 se non trova nessuna stringa nel file
e -1 se trova da qualche parte la stringa)
per il momento grep mi visualizza la stringa trovata
ma rc e' sempre zero e quindi va a scrivere sul file

 Dovrebbe darmi zero solo quando non trova la stringa e scrive.
No, la funzione system() restituisce 0 se l'esecuzione del comando è
andata a buon fine e -1 se c'è stato un errore ma non dice niente al
riguardo dell'esito del comando stesso.
EMG

Orsetto (
maz...@nospamgeocities.com
) wrote:
[ snip ]
: (qualcuno puņ provare a compilarlo??)
Del tutto inutile: cosi' come l'hai postato non si
compila.
[ snip ]
: la variabile rc mi da sempre zero.
Con tutto il rispetto, mi sembra che piu' che con la
system(), tu abbia problemi con il C in generale...
: Dovrebbe darmi zero solo quando non trova la stringa e scrive.
: Potete aiutarmi???
Questo pezzo di codice, sotto Linux, legge il codice di 
uscita di grep, e se e' pari a 1 (indicando che non ha
trovato alcun file) stampa un "not found".
----------------------------------------------------------
	rc = system("grep XC1234567 *.txt");
        if (rc == 0) {
		/* tutto OK: grep ha trovato qualcosa */
        } else if (rc == (int)-1) {
                perror("system"); exit(EXIT_FAILURE);
        } else if(WIFEXITED(rc)) {
                if(WEXITSTATUS(rc) == 1)
                        printf("XC1234567 not found\n");
                else
                        printf("child exit status: %d\n", 
				WEXITSTATUS(rc));
        } else {
		printf("system() returned %d\n", rc);
	}
----------------------------------------------------------
Ciao ciao
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

	}
Ciao,
Gianni.

     e poi strupr(gianni) piu' avanti.
E' una chiamata alla funzione dichiarata prima.
EMG

come posso intercettare se trova qualcosa o no??
Reindirizzare aggiungendo qualcosa come " > output.txt " ?
Skyscraper (apprezzatelo adesso : eviterete la coda)
----------------------------------------------------
 
andrea_...@bigfoot.com
----------------------------------------------------
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

Reindirizzare aggiungendo qualcosa come " > output.txt " ?
no mi serve solo capire se grep ha trovato o no la stringa...

	char *buffer=malloc(strlen("grep >")+strlen(stringozza)+strlen(" *.txt"));
^^^^ ma non ci vuole un +1 ?
char *buffer = malloc( strlen("grep >") + strlen(stringozza) + strlen(" *.txt")
+ 1); 



si ma anche se lo metti
rc da sempre zero....

rc da sempre zero....
Ovvio ! ci mancherebbe che c'entrasse qualcosa ! ;)
Pero' e' meglio se lo metti ! ;))


no mi serve solo capire se grep ha trovato o no la stringa...
Scusami tanto, se stai lavorando sotto Windows95 ed esegui
grep labalenagiuseppina *.c > output.ris 
se ottieni che "output.ris" ha lunghezza 0, allora, se il caricamento di grep
non ha subito errori, non ha trovato nulla.
Ti ho scritto il programma di seguito, ma tieni presente che ne' filelength(),
che fileno() sono funzioni ANSI.
Io l'ho compilato col DJGPP per DOS.
#include <stdio.h>
int main()
{
    int risultato ;
    FILE * fp ;
    risultato = system ( "grep alfonso *.txt > output.ris" ) ;
    if (risultato == 0)
       printf("chiamata a grep senza errori\n");
    else
    {
       printf("errore !\n");
       exit ( 1 ) ;
    }
    fp = fopen( "output.ris", "r" ) ;
    if (fp == NULL)
    {
       printf("file \"output.ris\" non trovato\n");
       exit ( 1 ) ;
    }
    else
    if ( filelength( fileno( fp ) ) == 0 )
       printf("stringa non trovata !");
    else
       printf("stringa trovata !");
    fclose ( fp ) ;
    return 0 ;


riguardo dell'esito del comando stesso.
Diciamo che system() dovrebbe restituire il codice di uscita del programma
eseguito, negli otto bit piu' bassi.
(almeno cosi' e' implementata col DJGPP)
-1 se c'e' stato un errore, ma non nel programma eseguito, nel tentativo di
caricarlo. 
Quindi dovrebbe essere "grep" a restituire qualcosa di diverso da 0 se non trova
nulla. 
Il problema sotto DOS e' che se viene eseguito il 
COMMAND.COM
 per il comando in
questione, il risultato sara' sempre 0, perche' e' difficile che succeda qualche
errore nel caricamento dell'interprete dei comandi, a meno che non ci sia
memoria sufficiente.
Secondo me, comunque, controllare le dimensioni di un file di risposta ( 0 = non
trovato, >0 = trovato ) e' il metodo migliore.


     if ( filelength( fileno( fp ) ) == 0 )
Lo puoi sostituire, in questo caso, con
if ( getc( fp ) == EOF )
cosě non usi funzioni non standard.
EMG

>>^^^^ ma non ci vuole un +1 ?
ti ringrazio tantissimo adesso funziona !!!!
ciao....