/Anonimizzato15192Utente anonimizzato29 ago 2014, 10:58Ciao ragazzi! ho un problema : ho scritto un progetto (per l'università ) in c++ il quale prende in input dalla shell un file.txt sul quale andrà a lavorare! Il mio problema è che il prof vuole che l'input venga passato dalla shell esclusivamente nel seguente modo: nomeeseguibile < nomefile.txt Io ho pensato di usare argv[] per catturare il nome del file che il prof mette in input( il nome lo deve decidere lui) solo che il il primo parametro che viene passato al programma ( per capirci argv[1]="<") nella shell è un comando e quindi in argv[2] non mi viene passato il nome del file come vorrei in quanto trovando il metacarattere '<' quello che c'è dopo non viene preso dall'argv[] come posso fare per eludere l'effetto del metacarattere in questione? Specifico anche che vorrei che in argv[2] ci fosse la stringa contenente il nome del file che poi io passero in input alla funzione open della libreria fstream per aprire il file grazie dell'aiuto
OoregonSuper FamosoIscritto danov, 2011Messaggi2191729 ago 2014, 11:15Sei fuori strada ... con <file.txt il contenuto del file viene rediretto allo standard input, quindi ti basta questo char buffer[100]; while(fgets(buffer, 99, stdin) != NULL) printf("%s", buffer); per leggere il contenuto stesso.
/Anonimizzato15192Utente anonimizzato29 ago 2014, 11:38Intanto grazie mille per la risposta! il problema che come dici tu in buffer viene salvato il contenuto del file! A noi serve solo il nome da passare alla funzione open della libreria fstream faccio un esempio: ammettendo che il nostro listato si chiami prova.cpp e il file che gli passiamo si chiami file.txt, e che all'interno di file sia salvata la stringa "ciao mondo". come dici tu in buffer viene salvato "ciao mondo" noi, invece abbiamo bisogno di riuscire a prendere solo il nome del file ovvere in questo caso "file.txt" grazie se ci puoi aiutare
OoregonSuper FamosoIscritto danov, 2011Messaggi2191729 ago 2014, 11:44Scusa ma a cosa ti serve il nome del file ?
/Anonimizzato15085Utente anonimizzato29 ago 2014, 11:55Secondo me, se prendi il nome del file per "riaprire" il file tramite fstream invece di prendere direttamente il contenuto da stdin, il prof vi boccia...e farebbe bene
OoregonSuper FamosoIscritto danov, 2011Messaggi2191729 ago 2014, 12:02mentat ha scritto:Secondo me, se prendi il nome del file per "riaprire" il file tramite fstream invece di prendere direttamente il contenuto da stdin, il prof vi boccia...e farebbe bene Se vi serve a riaprirlo per leggerlo, sì, farebbe bene a bocciarvi ...
/Anonimizzato15085Utente anonimizzato29 ago 2014, 12:26In ogni caso non si può fare. Il "metacarattere" "<" non è affatto un metacarattere ma è un vero e proprio comando impartito al sistema operativo che viene eseguito prima dell'eseguibile. Il seguente comando nomeeseguibile < nomefile.txt dà origine alla seguente serie di operazioni: 1. prendi il contenuto del file nomefile.txt 2. usalo come input dell'eseguibile nomeeseguibile Quindi pensare che "<" e "nomefile.txt" facciano parte dell'array argv[] è proprio sbagliato. Speriamo che il vostro professore non legga questo forum...
/Anonimizzato15193Utente anonimizzato29 ago 2014, 12:49mentat ha scritto:In ogni caso non si può fare. Il "metacarattere" "<" non è affatto un metacarattere ma è un vero e proprio comando impartito al sistema operativo che viene eseguito prima dell'eseguibile:... E' vero che è un comando ma < è un metacarattere! non è sbagliato definirlo cosi!
OoregonSuper FamosoIscritto danov, 2011Messaggi2191729 ago 2014, 13:01Non è affatto un metacarattere (anche se in molti programmi universitari viene riportato in questo modo) ... in realtà un metacarattere rappresenta un "insieme di altri caratteri" (ad esempio * e ? per i caratteri jolly) mentre < e > "eseguono un'operazione" (meglio operatori di redirezione) ... ma non è importante questo ...
/Anonimizzato15085Utente anonimizzato29 ago 2014, 13:51Possiamo definirlo come vogliamo, ma la semantica non cambia, quel simbolo "<" rappresenta un'operazione impartita al sistema operativo che viene eseguita prima del programma. Dato che la parola "metacarattere" rimanda al concetto di "carattere" e quindi al concetto di "argomento passato al programma" ho pensato che fosse particolarmente fuorviante... ed infatti, almeno nel tuo caso, lo è stato tant'è che intendevi gestirla come argomento al pari di altri caratteri. Per fortuna il sistema operativo rende impossibile (o almeno difficile) perseguire tale strada ed ecco che la verità si manifesta in tutta la sua semplicità: non devi leggere il "nome" del file, devi leggere "il file".