Esercizio Su File Di Testo In C

Pubblicità

Sante Altamura

Nuovo Utente
Messaggi
19
Reazioni
1
Punteggio
23
Salve a tutti,dovrei scrivere un programma in C che legga un file di testo già presente e mi conti il numero di caratteri, parole e righe. Qualcosa sono riuscito a capirla ma purtroppo devo far fronte alle situazioni limite in cui il conteggio non avviene. Se qualcuno può aiutarmi lo ringrazio in anticipo.
 
Queste sono le due funzioni che ho fatto per contare e righe e i caratteri e penso che funzionino( se non è cosi non farti problemi a dirmi dove ho sbagliato).Per la funzione dove conta le parole non ho idee e sto tentando di fare pseudo ma niente. Tieni conto che bisogna anche verificare le situazioni limite.
C:
#include <stdio.h>
#include<stdlib.h>
#include "accessodati.h"
int conteggio_numero_righe(char * documento,FILE * file){
        char c;
        int conteggio=0;
        file=fopen(documento,"r");
        if(file==NULL){
            printf("Errore di apertura");
            exit(1);
        }
        while(fscanf(file,"%c",&c)>0){
            if(c=='\n'){
                conteggio=conteggio+1;
            }
        }
        fclose(file);
        return conteggio;
}
int conteggio_caratteri(char * documento,FILE * file){
    char c;
    int conteggio_char=0;
    file=fopen(documento,"r");
    if(file==NULL){
        printf("Errore di apertura");
        exit(1);
        }
    while(fscanf(file,"%c",&c)!=EOF){
        if((c==' ') || (c=='\t') || (c==',') || (c=='\n') || (c=='.') || (c==';')){

        }
        else{
            conteggio_char++;
        }
    }
    fclose(file);
    return conteggio_char;
}

Ovviamente nel main poi sta specificato tutto, ma non credo sia quello il problema quindi inutile che lo invio
 
Ultima modifica da un moderatore:
Utilizza l'apposito tag CODE per postare il codice, per favore (magari con CODE=C): https://www.tomshw.it/forum/threads...ode-nome-linguaggio-nelle-discussioni.597452/




Quando operi sui file ricordati sempre che in base al sistema operativo l'Invio è codificato in maniera diversa (tienilo a mente, perchè in certi casi potresti avere problemi).
Non capisco perchè alle funzioni passi il nome del file ed un puntatore a FILE (che deduco non sia inizializzato).
Al posto dell'if vuoto, inserisci un continue nel suo corpo.

Per quanto riguarda il conteggio delle parole ti dovrebbe essere sufficiente incrementare il contatore ogni volta che trovi uno spazio, oppure un carattere di nuova riga.
Tenendo però presente che dovrai aggiungere 1 all'ultima parola letta (solo nel caso in cui la riga non termini con \r\n).[/hr]
 
Non passo il nome del file, quei parametri sono appunto parametri perchè opero indirettamente sul file di testo, non è meglio cosi?
Comunque continue come lo devo scrivere?in che sintassi?
 
Come no? Io vedo questo:

C:
int conteggio_numero_righe(char * documento,FILE * file){
        char c;
        int conteggio=0;
        file=fopen(documento,"r");

Quindi "documento" è il nome del file aperto in sola lettura, mentre file viene utilizzato per contenere il puntatore al file aperto. Ed è questo che non capisco: perchè passare il puntatore, se tanto al termine della funzione viene comunque chiuso il file? Come invochi queste funzioni?

Per l'altra domanda, diventerebbe così:

C:
    while(fscanf(file,"%c",&c)!=EOF){
        if((c==' ') || (c=='\t') || (c==',') || (c=='\n') || (c=='.') || (c==';')) continue;
        conteggio_char++;
    }

Il continue in pratica "salta" di nuovo alla condizione del while.
 
In documento gli passo nel main poi l'effettivo file,cioè "file.txt", ok non ha molto senso perchè lo potrei fare anche nella funzione stessa, ma lo faccio per uno schema mentale mio che è comunque corretto sintatticamente. Comunque avresti un idea riguardo al scrivere un algoritmo che quando incontra lo "\n" deve verifica che non si tratti di una parola spezzata? Perchè il dubbio che mi viene è il fatto che se scrivo : "ca\n" e a capo "sa" oppure "casa\n" e a capo "grande",come faccio a dire che nel primo caso si tratta di una parola spezzata e nel secondo di due parole differenti?
 
Questo dipende dal tipo di file che stai leggendo anche. Se sai su quali dati andrai ad operare sai quali situazioni non ti si presenteranno.
Di solito per conteggio di parole si intende semplicemente lo spazio tra una parola e l'altra. Non so se vogliono farti considerare altre casistiche. Inoltre per comprendere quali parole sono sensate e quali no ti servirebbe un dizionario... quindi mi concentrerei a considerare le parole quando si trova uno spazio.
 
Si certo questo lo so, ho risolto il problema del conteggio riguardo ai caratteri separatori, ma ovviamente per un file di testo sarebbe impossibile determinare senza che il computer conosca la lingua italiana,quando una parola viene spezzata. Non so se hai capito cosa intendo.
 
Certo che ho capito, ed ho poi spiegato nel post precedente.
Si tratta di un esercizio, quindi le parole saranno normalmente separate da spazi, al limite dovrai tener conto pure del testo su più righe, ma dubito qualcosa di più. Ti è sufficiente guardare che file devi utilizzare per sapere come implementare il programma. Hai parole spezzate nei file? Se non ne hai non ha senso preoccuparsene, trattandosi solo di un esercizio.
 
Pubblicità
Pubblicità
Indietro
Top