Gestione file di testo con apertura binaria.

di il
5 risposte

Gestione file di testo con apertura binaria.

Salve, ho provato a far funzionare un programma proposto dal mio testo epr invertire i numeri in un txt, tuttavia non funziona ed ho vari interrogativi.

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

int main() {
    FILE *f;
    long int inizio, fine; //Devono essere inizializzati come long
    int tempi, tempif;
    unsigned int dim;

    /* Nel caso in cui l'apertura non venga eseguita con successo */
    if((f=fopen("D:\\numint.txt", "rb+"))==NULL)
    {
        puts("Non e' possibile aprire il file numint");
        exit(1);
    }
    inizio =0;
    dim= sizeof(int);
    fseek(f, -dim, SEEK_END); //Dalla fine del file mi sposto a sinistra di dim, cioè di un blocco dati
    fine=ftell(f);
    while (inizio<fine)
    {
        fseek(f, inizio,SEEK_SET); //Setta l'indicatore di posizione rispetto al file cui fa riferimento f a scostamento 0 rispetto all'inizio
        fread(&tempi, dim,1,f); //Legge blocco dati dal file riferito da f, lo memorizza nel vettore identificato da tempi, legge un blocco di dimensione dim
        fseek(f, fine,SEEK_SET); //Si sposta prima dell'ultimo blocco dati
        fread(&tempif, dim, 1, f); //Legge l'ultimo blocco dati e lo memorizza nel vettore identificato da tempif
        fseek(f,fine,SEEK_SET); //Mi riposiziono a prima dell'ultimo blocco dati, dato che la precedente istruzione mi ha fatto arrivare a fine file.
        fwrite(&tempi,dim,1,f); //Scrivo nell'ultimo blocco il valore nel vettore tempi
        fseek(f,inizio,SEEK_SET); // Mi posiziono a inizio file
        fwrite(&tempif,dim,1,f); //scrivo nel primo posto l'ultimo elemento
        inizio=inizio+dim;
        fine=fine-dim;

    }

    return 0;
}
Degli interrogativi, vi sono: come va gestito il file di testo? Cioè, il problema è che, dato che devo gestire dei numeri, ci deve essere un modo per far capire al programma se quello in input è un numero o una cifra, in modo che scrivendo ad esempio 12, lo lasci illeso, al psoto di trasformarlo in 21, quindi deve esserci un modo per separare i numeri tra loro. In tal caso, come si gestisce lo spazio, tenendo conto che nel programma non fa altro che passare da un byte all'altro, e che anche lo spazio dovrebbe occupare spazio in memoria? O forse conviene unare un newline?
In ogni caso, anche scrivendo cifre attaccare contigue senza alcuno spazio, esse non vengono ordinate come ci si aspetta.
Un'altro dubbvio particolare è il sizeof int usato.So che a seconda del compilatore è 2 o 4 byte, nel mi ocaso 4, ma il file di testo non potrebbe usare una dimensione in byte diversa da quella del compilatore?
Grazie.

5 Risposte

  • Re: Gestione file di testo con apertura binaria.

    Un attimo... ma che stai facendo? C'è un bel po' di confusione...

    Cosa c'è nel file di testo esattamente? Perché lo apri in binario? Cosa devi ottenere in output?

    Il testo esatto dell'esercizio qual è?
  • Re: Gestione file di testo con apertura binaria.

    L'esercizio descrive il programma come:
    Codice che inverte il contenuto del file, contenente interi ,scambiando primo elemento con ultimo, secondo con penultimo, ecc, usando la modalità binaria.
    Per il resto ho solo copiato il codice dell'esercizio tale e quale come sta sul testo, scrivendo i commenti di ciò che ho capito.
  • Re: Gestione file di testo con apertura binaria.

    La soluzione dell'esercizio si può definire solo se l'esercizio stesso è spiegato chiaramente.

    Se parli di un file .txt si presuppone che sia un file di testo e i valori siano registrati come caratteri ASCII e non in binario.
    Se fosse veramente binario, bisognerebbe capire che tipo di valori sono memorizzati (interi a quanti byte? float?) e come sono disposti.

    Puoi mostrare il testo (in una immagine)?

    Il file dati con cui hai fatto le prove come l'hai creato?
  • Re: Gestione file di testo con apertura binaria.

    Il testo non parla di niente di tutto questo in alcuna maniera purtroppo.. non sapevo neanche che in un file di testo i caratteri siano a prescindere in ASCII, pensavo che la funzione lo aprisse e lo convertisse in binario da se per la lettura
    Non specifica in alcun modo il file di ingresso, ed è questo che volevo capire, cioè come crearlo.
  • Re: Gestione file di testo con apertura binaria.

    Ti ripeto ... possiamo vedere l'immagine del testo?
Devi accedere o registrarti per scrivere nel forum
5 risposte