Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24

    nome file da tastiera

    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.

  2. #2

    Re: nome file da tastiera

    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..?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    in c

    chiedo scusa

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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 ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    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

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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");

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    ma io avevo già fatto così...è solo che mi dava problemi...
    domani vedo e poi magari vi aggiorno

    ciao e grazie

  8. #8
    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:

    codice:
    alfa = leggi_parola(carattere, '\n');
     // Occorre una variabile globale impostata a priori detta MEM > 0
    e poi la funzione era così:

    codice:
    /*
    	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;
    }
    un po' lunga, ma di certo non si sbaglia così!

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    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

  10. #10
    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? La variabile "alfa" nella prima parte di codice è quella che sarà "nomefile" per aprire il file!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.