PDA

Visualizza versione completa : [C] Programmino che aggiunge un carattere alla fine di ogni rigo di un file .txt


LUCAB
15-12-2004, 23.52.56
Salve a tutti ho un problema con un piccolo programmino in C. Voglio aprire un file contenente dei dati e voglio aggiungere alla fine di ogni riga un carattere (es. voglio aggiungeer <).HO aperto il file e ho effettuato il controllo fino alla fine del file.Eccovi il codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define EOL '\n'
int main(void)
{
FILE *kf;
char A[60];
if ((kf = fopen("key.txt","rw"))==NULL) puts("\nImpossibile aprire il file.\n");

while (fscanf(kf,"%s",A)!= EOF)
{
if(fscanf(kf,"%s",A)== '\n')
{
printf("%d",kf);
fprintf(kf,"<");
}
}
getchar();
fclose(kf);
return (0);
}


sembra che dovrebbe andare bene ed invece il mio file rimane invariato.Dateci un occhiata voi e fatemi sapere cosa ho sbagliato... vi ringrazio ciao

Deep73
16-12-2004, 15.00.51
Da quel che mi ricordo, č meglio che dichiari la variabile:
char *A;

e la allochi dinamicamente. Cmq. non capisco perchč usi questo metodo. Fondamentalmente, stai caricando in A (60 caratteri? perchč? se la riga ne ha di pių?) qualcosa e controlli che non sia EOF, poi ricarichi ancora e controlli che un non ben specificato carattere della riga letta sia il ritorno a capo.

Domanda, perchč non usi fgets invece che fscanf? Da quel che mi ricordo in quel caso alloca lui lo spazio della riga necessario e si ferma al primo carriage return.

espiritos
16-12-2004, 22.54.41
Ma li legge parola per parola non riga per riga...si presume che la parola nn sia pių lunga di 60 caratteri...cmq penso che dovresti leggere carattere per carattere fino a quando non trovi il carattere '\n' . Io proverei cosė...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define EOL '\n'
int main(void)
{
FILE *kf;
char A;
if ((kf = fopen("key.txt","rw"))==NULL) puts("\nImpossibile aprire il file.\n");

while (fgetch(kf,"%c",A)!= EOF)
{
if(fgetch(kf,"%c",A)== '\n')
{
printf("%d",kf);
fprintf(kf,"<");
}
}
getchar();
fclose(kf);
return (0);
}

LoryOne
17-12-2004, 11.07.00
E' una questione di file pointer position.
Devi utilizzare le funzioni di riposizionamento del puntatore all'interno del file.
Dovrebbero andare bene fgetpos() e fsetpos()

In pratica, quello che vuoi far tu č leggere un carattere o una stringa di caratteri per poi sostituire il carattere '\n' con '<'.
Questo implica settare il file pointer position nella posizione in cui il carattere che vuoi modificare si trova effettivamente nel file e procedere da li con la scrittura dei nuovi dati ;)

Per sapere se si č raggiunta la fine del file, si utilizza feof(), quindi:

while (!feof(kf)){
//istruzioni...
}

Ps: Aggiungo che se non sbaglio "\n" non č un solo carattere, bensė' la sequenza 13,10