View Full Version : Escrever para ficheiro (ler tb) em C
Boas,
Alguem me pode dar umas luzes de como escrever um profile (tipo nome, nº, data, etc.) para um ficheiro e depois escrever outro por baixo?
Vou tentar explicar o melhor possivel. É que o problema não é escrever o 1º, é que depois ao escrever o 2º profile, isto escreve por cima do 1º.
Já li mt coisa acerca de escrever para ficheiros mas só o que arranjo é explicações um pouco básicas do tipo fazes fprintf etc etc..
ajudem pk estou complentamente sem ideias...
Já há bastante tempo que não programo em C (isso vai mudar brevemente...) por isso não te posso dar a certeza absoluta.
Mas penso que isso te está a acontecer pois estás a abrir o ficheiro no modo r. Tenta abrir no modo a+ e o cursor de escrita está no fim do ficheiro e não no inicio como no modo r.
Vê se te ajuda.
Fazes fprintf e acabas a string com \n ... ele mete o file pointer pra linha seguinte.
Vi agora a resposta do greven ... tens k abrir como "w" ... e se tiveres que abrir o ficheiro pela segunda vez por exemplo, tens que percorrer até lá abaixo.
Vai ver os manuais da Gnu por exemplo ;)
É isso mesmo!! resultou na perfeição, obrigado.
Qual solução ?
A minha ou a do Merven ?
A do Greven, a tua é para muda de linha no ficheiro o que tambem a usei. :D
So uma coisa agora para ler do ficheiro se eu puser algo do genero: while(i!= "\n") manda para uma variavel etc.. ele reconhece o \n como sendo o fim de uma linha no ficheiro?
Penso que sim... mas nada melhor que um debug! :D Experimenta e vê. Esses pequenos pormenores eu relembro trying! ;)
Madril, és um noob! :D
$ man fopen
FILE *fopen(const char *path, const char *mode);
r Open text file for reading. The stream is positioned at the
beginning of the file.
r+ Open for reading and writing. The stream is positioned at the
beginning of the file.
w Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
w+ Open for reading and writing. The file is created if it does
not exist, otherwise it is truncated. The stream is positioned
at the beginning of the file.
a Open for appending (writing at end of file). The file is cre-
ated if it does not exist. The stream is positioned at the end
of the file.
a+ Open for reading and appending (writing at end of file). The
file is created if it does not exist. The initial file position
for reading is at the beginning of the file, but output is
always appended to the end of the file.
Se quiseres ler linha a linha, tens sempre o fgets (lembra-te que o '\n' fica no fim da string que lês).
Galbne_PT 23-01-2006, 18:18 Já algum tempo k não programo em c, mas no tempo que k era obrigado em programar em c lembro-me k existe uma funcão mt boa para o deu caso, tens é de ver no google ou algo do genero como usa-la bem.... a funcao é a fseek, pelo k me lembro poe o offset na posicao do ficheiro onde kiseres...
Agora tenho outro problema :\
Quando faço fgets(..) isto lê bem a primeira linha mas não faço a minima ideia como o ponho a ler a 2ª linha e mandar essa 2ª para outra variavel...
Ja tentei dar a volta á questão usando fscanf mas ao ler um %s só lê a primeira palavra... Presumo que com %s não va a lado nenhum porque a linha tanto pode ter 1 com 2,3 palavras...
Alguem me pode ajudar a por isto a lêr linha a linha?
while(fgets pra um buffer)
A solução do Madril para mim de facto é a melhor, mas cá vai uma curta explicação (se conseguir....)
A cada iteracção do while o "ponteiro" que "indica" a linha "desce", dentro do while basta fazeres fgets como se estivesses a ler apenas uma linha, o while trata de te "mover" o ponteiro para baixo...
btw, usa o !EOF(f) para evitares que estoire ;)
abraços, HecKel
EOF pra que ?
é só fazer man ao fgets ... alem disso o fgets se bem me lembro diz o numero de caracteres lidos, pelo que quando chega ao fim dá 0 :rolleyes:
Epah ja não tou a perceber nada,
Eu tenho isto:
FILE *produtores;
produtores = fopen ("produtores.txt","r");
while (>>n sei k condição meter<<) {
fgets(produtor.nome,80, produtores);
printf("%s \n", produtor.nome );
}
kualker coisa que meta dentro da condigão do while entra sempre em ciclo infinito, ja exprimentei
while (fgetc(produtores)!='\n')
para que quando axasse um \n parasse, mas continua sempre e na mesma linha .
Metes o fgets na condição do while
LOL e não é que da mesmo, não percebo é a lógica disso mas funciona :D
ahhh, Madril tava a pensar noutra cena..., sorry :(
abraços, HecKel
HiGhVoIcE 25-01-2006, 22:50 podes por funções como condições em whiles, if, etc...por algum motivo as funções podem ter retorno de algo ;)
porque nao fazes assim?
while( caracter = fgetc( produtos ) )
if( caracter != '\n' )
olha eskece mete antes só: while( !EOF ).
deve chegar para sacares todas as strings uma de cada vez até ao fim do ficheiro.
#define SIZE 1024
FILE *file;
char line[SIZE];
file = fopen("file.txt","r");
while(fgets(line,SIZE,file) != NULL)
{
....
}
fclose(file);
O conteúdo de cada linha vai estar no line
|
|