|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
scrivere un vettore...
di 3011 componenti in un file con 60 celle per riga. come si fa la formattazione? Il linguaggio è C. grazie mille
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cioè come è composta ogni riga ? Che tipo di dati ci vuoi mettere in ogni posizione ? Questi numeri li devi poi rileggere ?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Ho un vettore di 3011 celle di numeri interi (le cifre del risultato di 2^10000) e devo riportare tale numero in un file di testo con formattazione di 60 cifre per riga. Ho risolto per ora cosi
for (n=0; n<=3010; n++) { fprintf(dat,"%i",a[n]); fprintf(bin,"%i",a[n]); i=i++; if (i==60) { fprintf(dat,"\n"); i=0; } ma volevo sapere se c'era un metodo migliore per farlo. In fortran 90 c'è proprio una formattazione adeguata (60I1), ma il C lo conosco poco poco e nn so dove mettere le mani. Inoltre per scrivere un file in formato binario, basta aggiungere il suffisso b nella linea dell'fopen all'operazione che si vuole eseguire su quel file e niente altro? Per esempio scrivendo bin=fopen("ciao.bin","wb") e lasciando tutto il resto per la gestione dei files invariato? grazie mille. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Il file dovrebbe venire come questo fatto in Fortran 90
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Devi usare un file ASCII:
Codice:
dat=fopen("ciao.dat","wb");
Codice:
int a [3011]; short i; short n; Codice:
for (n=0; n<3011; ) {
i=0;
while (i<60) {
fprintf (dat, "%d", a[n++]);
i++;
}
fprintf (dat, "\n");
}
Ciao |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Il file binario nn mi funziona ancora, lo scrive come un file ascii.
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Perché (a che ti serve?) vuoi il file binario? |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
si miserve il file binario perche devo scrivere, per un esame, un programma che mi calcoli 2 alla 10000 e mi scriva il risultato in un file asci con su ogni riga 60 cifre del numerone che viene fuori ed anche in un file binario.
In fortran sono riuscito a fare tutto, ed anche per il C leggendo nel manuale in linea ho trovato che bisogna solo aggiungere come suffisso all'operazione da compiere (in questo caso scrivere su file) la b ("wb"). |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Per avere il file binario basta aggiungere la fprintf() relativa:
Codice:
bin=fopen("ciao.bin","wb"); /* File binario */
dat=fopen("ciao.dat","w"); /* File ASCII */
for (n=0; n<3011; ) {
i=0;
while (i<60) {
fprintf (bin, "%d", a[n]);
fprintf (dat, "%d", a[n]);
n++;
i++;
}
fprintf (dat, "\n");
}
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Proverò, grazie.
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Ciao, senti la scrittura su file in modalità binaria nn mi funziona, sembra che nn serva solo aggiungere la b nell'apertura del file.
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Allora mi aspetto che venga fuori un file come nel caso del fortran 90 che allego. Cmq adesso come adesso mi viene, utilizzando il suffisso b alla modalità di scrittura, solo un file con dentro il vettore ma in formato ascii, cioè come nel caso del file puntato da dat. Cmq allego anche il listato che funziona egregiamente tranne che per la scrittura del file binario.
Ecco il listato |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
il file binario dovrebbe venire come questo che ho fatto col fortran
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Per la scrittura del file binario, puoi procedere anche nel seguente modo:
aggiungi:in cima al programma: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> e poi sostituisci FILE * bin; ... bin=fopen("2_10000.bin","wb"); ... fprintf(bin,"%d",a[n]); ... fclose (bin) con int bin; bin = open ("2_10000.bin", O_WRONLY | O_CREAT) ... write (bin, a, sizeof (a)); /* FUORI DA OGNI LOOP */ ... close (bin) ed esegui. ATTENZIONE: l'istruzione write() deve essere fuori da ogni loop! (magari prima della relativa close()) Ti allego il file binario che ho ottenuto |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Ok, il file sembra essere lui, nelle dimensioni è identico a quello ottenuto con fortran. potresti spiegarmi cosa hai fatto? sai dovrei ripeterlo al prof e nn posso dire nn lo so. cmq strano che ci voglia tutto questo casino per scrivere un file binario, molto meglio il fortran
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Te l'ho spiegato nell'ultimo msg. Prendi il tuo sorgente e lo modifiche come te l'ho detto io. Ti assicuro che il C non è assolutamente più incasinato del fortran... basta prenderci la mano! |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
L'ho provato ora. Nn riesce ad includere unistd.h, ho provato a toglierlo e mi dice coll to funcion "Xxxxx" whit no prototype.
L'ho fatto girare lo stesso e mi funziona, cioè salva i due file binario ed ascii. Grazie mille cmq. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 6479
|
Si ho capito come fare manualmente ma tutte qelle chiamate ai file *.h....insomma cosa è cambiato da prima? garzie
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
fwrite (&a[i], sizeof(int), 1, bin); ossia: "scrivi 1 elemento del verrore 'a' (il contenuto di a[i]), la cui dimensione è quella di un intero" Adesso purtropo non ho tempo. Se posso, ti mando il file corretto, ma non so se faccio in tempo Ciao |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:34.



















