|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2006
Messaggi: 244
|
[C] Problema con programma che "scambia" caratteri
Ho bisogno di un programma che mi legga un file e che mi cambi le virgole in punti. Su un libro che uso per l'uni dice di usare file in formato ".dat".
ecco il codice che ho scritto (può essere sbagliato alla grande,dato che a lezione le operazioni sui file non le abbiamo mai fatte): Codice:
#include<stdio.h>
#include<stdlib.h>
int main ( int argc, char *argv[]) {
int c;
FILE * fp;
fp=fopen(argv[1],"w");
if(fp==NULL)
printf("Nome file inserito non valido\n");
else
printf("Apertura del file \"%s\"......\n",argv[1]);
do{
c=getc(fp);
putchar(c);
if (c=='.')
c=',';
putc(c,fp);
}
while ( c != EOF);
fflush(fp);
fclose(fp);
printf("\n");
exit(EXIT_SUCCESS);
}
Ho provato a farlo con le liste concatenate ma ho lo stesso problema. Ringrazio in anticipo
__________________
Acer Timeline 5810t - Arch Linux 64 bit / Windows 7 |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2005
Messaggi: 168
|
E il problema quale sarebbe? :P
PS. Indenta il codice. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
le estensioni sono solo un buon modo per dare una informazione veloce del contenuto del file...non sono strettamente necessarie.
potresti chiamare il tuo file anche .zip o .mp3 o senza alcuna estensione...resterebbe comunque un file di testo. tornando al tuo problema...il tuo codice non può funzionare per molti motivi... intanto la funzione fopen col parametro "w" apre un file in scrittura; in particolare se il file da aprire esiste, questo viene svuotato come puoi vedere qui -> C++ Reference - fopen ovviamente nel file non leggi nulla, non solo perchè è stato svuotato, ma perchè la modalità "w" non prevede la lettura, ma solo la scrittura. per la lettura di un file devi aprirlo in modalità "r" oppure "r+" o "w+" per consentire scrittura e lettura (maggiori dettagli li trovi nel link di sopra). per i tuoi scopi la cosa più semplice da fare è aprire il file in lettura, salvarsi il suo contenuto in un array di char, e chiuderlo. scorrere l'array e sostituire ogni ',' con '.' aprire il file in scrittura e scriverci tutto l'array |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
a che serve l'array intermedio? si tratta solo di sostituire ogni istanza di un certo carattere con un altro, puó anche riscrivere i caratteri man mano che li legge.
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2006
Messaggi: 244
|
avevo provato anche con w+ ma il risultato era lo stesso.
Avevo iniziato a farlo con delle liste concatenate, vedo come funziona con quelle allora. Il problema è che dopo che un file viene "usato" dal programma diventa illeggibile, in quanto gedit non riesce a trovare una codifica caratteri idonea. Questo per quale motivo?
__________________
Acer Timeline 5810t - Arch Linux 64 bit / Windows 7 |
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
Quote:
è ovvio che la semplice sostituzione di caratteri si può fare in altri modi sicuramente più efficienti, ma visto che è evidente che kierlo è alle prime armi o quasi con C, credo sia meglio che capisca per bene la logica di programmazione e non come ottimizzare. Quote:
se provi a fare un programma che fa una scrittura normale (usando ad esempio fputc) vedrai che non c'è alcun problema di codifica caratteri. se vuoi fare tutto in un unica passata, devi aprire il file in modalita "r+", la modalità "w+" prevede lo svuotamento del file. Ultima modifica di deadlyomen17 : 22-05-2010 alle 11:25. |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
molto opinabile direi.
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
ogni opinione è opinabile
presenta anche la tua così se ne discute potremmo presentargli una soluzione che in un unico ciclo legge ed eventualmente sostituisce il carattere ',' con '.' potremmo fargli caricare il file in memoria di colpo, e non leggerlo carattere per carattere, aumentando la velocità... ci sono tante soluzioni! quella era a mio avviso la più semplice e/o intuitiva..ma potrei essermi sbagliato ovviamente |
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Sep 2006
Messaggi: 244
|
Quote:
domani provo che ora non ho tempo.. Grazie mille per gli aiuti!
__________________
Acer Timeline 5810t - Arch Linux 64 bit / Windows 7 |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
Quote:
quindi se fai fgetc e dopo fputc, il risultato non è la sostituzione del carattere letto con il nuovo, bensì la sostituzione del carattere successivo a quello letto con il nuovo... |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Sep 2006
Messaggi: 244
|
ma per crear un nuovo file basta fare
fp=fopen("nomefile",r+); per aprilo anche in scrittura(con fp puntatore a file)? Conviene a questo punto non mischiare le cose..tanto non ho la necessità che sia lo stesso file modificato, mi basta averne uno con soli punti..
__________________
Acer Timeline 5810t - Arch Linux 64 bit / Windows 7 |
|
|
|
|
|
#12 | ||
|
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
Quote:
Quote:
dipende dal significato di "conviene", sicuramente a mo di esercizio va bene qualsiasi cosa basta che funzioni bene e sia chiara. |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:38.




















