PDA

Visualizza la versione completa : [C] Acquisire nome file da tastiera


woss
11-01-2006, 20:40
devo aprire in lettura un file di testo del quale il nome viene dato da tastiera:
cioè il nome del file di testo che devo aprire non lo conosco e devo acquisirlo da tastira, il nome acquisito da tastiera sarà quindi il nome fisico del file che devo aprire.

unomichisiada
11-01-2006, 20:46
Originariamente inviato da woss
devo aprire in lettura un file di testo del quale il nome viene dato da tastiera:
cioè il nome del file di testo che devo aprire non lo conosco e devo acquisirlo da tastira, il nome acquisito da tastiera sarà quindi il nome fisico del file che devo aprire.
In che linguaggio di grazia..?

woss
11-01-2006, 20:59
in c

chiedo scusa

oregon
11-01-2006, 21:04
Beh ... specificalo nel titolo con il tag

[C]

In ogni caso, cosa non sai fare? Chiedere il nome del file o aprirlo?

Dai un'occhiata alle funzioni scanf e fopen ...

woss
11-01-2006, 21:26
per esempio:

file_da_aprire = fopen("file.txt",
"r");

il nome file.txt non lo conosco e in qualche modo lo devo acquisire da tastiera.
non riesco ad acquisire da tastiera il nome del file da aprire.

avevo pensato all'uso di array di tipo stringa di grandezza 25
poi comunicare tramite qualche printf la lunghezza massima del nome fisico del file di testo che deve essere minore della grandezza dell'array e visto che sono in linux l'uso di underscore se il nome è composto da più parole
poi una scanf per acquisire il nome del file ed è qui che mi blocco..
non riesco ad associare il nome acquisito alla variabile array che poi utilizzerò nella fopen...

se qualcuno può aiutarmi
anche specificando un'altro metodo completamente differente

grazie

oregon
11-01-2006, 22:47
In genere la scanf e' una delle funzioni di base che si studia per prima (anche perche' e' molto semplice).

Dichiari un array di caratteri abbastanza grande

char filename[250];

e lo usi per acquisire il nome

scanf("%s", filename);

e usarlo nella fopen

file = fopen(filename, "r");

woss
12-01-2006, 00:59
ma io avevo già fatto così...è solo che mi dava problemi...
domani vedo e poi magari vi aggiorno

ciao e grazie

PrezzoMania.com
12-01-2006, 10:51
Con la scanf come viene usata qui sopra, si rischia, con nomi di file lunghi, di uscire fuori dallo spazio di memoria allocato...

Quando ancora mi serviva programmare in C usavo una cosa del genere:


alfa = leggi_parola(carattere, '\n');
// Occorre una variabile globale impostata a priori detta MEM > 0


e poi la funzione era così:



/*
Funzione leggi_parola():
la funzione permette di creare un array contenente un non
definito a priori numero di caratteri di input
*/
char *leggi_parola(char primo, char tappo)
{
int i=0; // Contatore sull'array per inserire i dati
char *stringa; // Array di char da restituire
char carattere; // Carattere di input
int memoria=0; // Grandezza dello spazio di memoria iniziale

// Alloco una quantità iniziale di memoria per la stringa
stringa = (char *)malloc(MEM);

// Il primo carattere sarà quello passato come variabile della funzione
carattere = primo;

// Continuo a leggere gli input fino a che non incontro il carattere
// speciale contenuto in tappo
do
{
// Se la memoria è piena la espando
if(i%MEM==0)
{
memoria = i+MEM;
stringa = realloc(stringa, memoria);
}
// Scrivo il carattere nel mio array
stringa[i]=carattere;
i++;
} while((carattere=getchar())!=tappo);

// Chiudo la stringa con il carattere terminatore '\0'
if(i%MEM==0)
stringa = realloc(stringa, i+1);
stringa[i]='\0';

return stringa;
}


:zizi: un po' lunga, ma di certo non si sbaglia così! :zizi:

woss
12-01-2006, 17:47
la prima versione fornita funziona, sbagliavo io.

la seconda non l'ho provata

io dico che con opportuni controlli e comunicazioni di vincoli all'utente si può migliorare la prima versione e renderla sicura e stabile come la seconda.

suggerimenti su come controllare la prima versione?

grazie cmq a tutti

PrezzoMania.com
12-01-2006, 20:31
Originariamente inviato da woss
la prima versione fornita funziona, sbagliavo io.

la seconda non l'ho provata

io dico che con opportuni controlli e comunicazioni di vincoli all'utente si può migliorare la prima versione e renderla sicura e stabile come la seconda.

suggerimenti su come controllare la prima versione?

grazie cmq a tutti
Perchè vincolare l'utente? Un programma deve saper gestire i vincoli e saperli modificare quando servono secondo me...

La mia funzione l'hai almeno guardata? :zizi: La variabile "alfa" nella prima parte di codice è quella che sarà "nomefile" per aprire il file!

Loading