Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 34
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322

    [c] leggere parole da un file di testo

    salve

    il mio obiettivo è fare una funzioncina che legge la prossima parola da un file di testo (.txt). Insomma la classica getword..

    essendo un dilettante allo sbaraglio non ci sono riuscito. Per lo meno non correttamente.

    Per far si che la funzione legga una parola dal file di testo non basta che faccio leggere il prossimo carattere, tramite getc, uno ad uno fino a che non trova uno spazio o un carattere non valido con un semplice ciclo while??

    Pero mentre sto leggendo i caratteri, li posso salvare dirattmente in una stringa (es: char *word) usandola come se fosse un vettore di caratteri??

    Poi cosa devo restituire? Posso restituire la parola (intesa come *char) o devo restituire qualcosaltro? Ho notato che molti restituiiscono un intero..

    c'è qualcuno che mi puo aiutare?

    allego una bozza di quanto fatto fin'ora..(mi scuso anticipatamente se ho scritto grandi stronzate!!)

    char *nextW(FILE *f) {
    char c;
    char *parola;

    while (c=getc(f) != EOF) {
    if (isalnum(c))
    *parola++=c;
    }
    *parola='\0';
    return parola;
    }

  2. #2
    Quando allochi lo spazio usato da parola ?
    fai così :

    codice:
    void nextW(FILE *f, char *parola) 
    {
       char c;
       
       while (c=getc(f) != EOF) 
          {
          if (isalnum(c))
             *parola++=c;
          }
       *parola='\0';
    }
    
    /***********/
    
    char stringa[100];
    nextW(fp, stringa);
    Inoltre, se non erro, la tua funzione legge sempre la prima parola
    Experience is what you get when you don’t get what you want

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    grazie.. proverò subito il codice..

    per prendere tutte le parole non posso fare un ciclo nel main che richiama sempre la funzione nextW? mi si presentano problemi?

    ogni volta che la chiamo, la parola corrente ottenuta poi la salvo in una struttuta tipo lista o albero (questo perche mi serve x un ex che richiede ciò).

    è fattibile secondo te?

    grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Tutto e' fattibile, pero' ho notato che nella tua prima bozza hai commesso l'errore grave di non allocare lo spazio per la stringa associata al puntatore.

    A questo punto, mi chiedo, sai scrivere il codice per implementare una struttura complessa come una lista o peggio un albero ?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    diciamo che su liste ed alberi ho gia fatto diversi esercizi funzionanti, anche se non ho fatto nulla di complesso ma le classiche funzioni di inserimento,modifica, cancellazione..e sempre con strutture che avevano interi come informazione..

    il mio problema è che non ho mai "lavorato" fin'ora con i file e con l'I/O...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da jacopos81
    il mio problema è che non ho mai "lavorato" fin'ora con i file e con l'I/O...
    Ma il problema piu' grande del tuo codice, ripeto, e' la mancata allocazione della stringa e l'uso di un puntatore non inizializzato ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    Originariamente inviato da Xaratroom

    codice:
    void nextW(FILE *f, char *parola) 
    {
       char c;
       
       while (c=getc(f) != EOF) 
          {
          if (isalnum(c))
             *parola++=c;
          }
       *parola='\0';
    }
    
    /***********/
    
    char stringa[100];
    nextW(fp, stringa);
    Inoltre, se non erro, la tua funzione legge sempre la prima parola
    ho provato copiando la tua funzione ma non mi fnziona lo stesso. Quando chiamo la funzione dal main, non mi salva nulla dentro alla varibile stringa. Com'è possibile?
    Bisogna usare per forza un vettore di char?

    riporto il codice:

    void nextW(FILE *f, char *parola) {
    char c;

    while (c=getc(f) != EOF)
    {
    if (isalnum(c))
    *parola++=c;
    }
    *parola='\0';
    }

    int main() {

    FILE *fp;
    fp= fopen("testo.txt","r");

    char stringa[100];
    nextW(fp,stringa);
    ......

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    Originariamente inviato da oregon
    Ma il problema piu' grande del tuo codice, ripeto, e' la mancata allocazione della stringa e l'uso di un puntatore non inizializzato ...
    concordo con te.. il fatto è che avevo fatto molti tentativi anche con l'allocazione della stringa ma non mi funzionava lo stesso.. poi ho riportato qui probabilmente la funzione piu sbagliata..

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devi aggiungere delle parentesi in questa riga

    while ((c=getc(f)) != EOF)

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    Originariamente inviato da oregon
    Devi aggiungere delle parentesi in questa riga

    while ((c=getc(f)) != EOF)
    grazie!

    ora mi sorge un altro problema però.. cioe la funzione mi salva tutto il contenuto del file dentro la stringa.

    chiarametne perche essendoci nel while solo la condizione dell'eof, va avanti fino a che non è finito il file.
    Allora aggiungo una condizione al ciclo while. metto anche un (c != ' ').

    while ( ((c=getc(f)) != EOF) && (c != ' ') )
    ...

    cosi quando vede uno spazio bianco si dovrebbe fermare no? pero non mi si ferma! com'è possibile?

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.