Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 29-03-2006, 23.07.33   #31
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Ma buf di che tipo deve essere? Cioè la struct dalla quale deve prendere i dati ha vari formati (int, short, long e anche un'altra struct al suo interno). Come faccio a passarglieli?
Manugal non è collegato   Rispondi citando
Vecchio 29-03-2006, 23.14.34   #32
quipo.it
WT Assistant
 
L'avatar di quipo.it
 
Registrato: 19-12-2000
Loc.: Cambiano (Torino)
Messaggi: 591
quipo.it promette bene
buf è una stringa definita come

char *buf;

fai una malloc della dimensione (in char) almeno pari alla dimensione della struttura, e poi serializzi i vari membri della struttura con una sprintf() come ti ho fatto vedere prima, mettendo un %s per i tipi stringa, un %d per i tipi intero, etc, con un separatore a scelta tra i vari campi. In questo modo puoi fare l'operazione inversa di estrazione in fase di lettura con una scanf() avente lo stesso formato.

Però, se da qualche parte hai le specifiche del formato del file, usa quelle...
___________________________________

There are 10 kinds of people in this world,
those who can read binary and those who can't.

Care to say "thank you"?
quipo.it non è collegato   Rispondi citando
Vecchio 29-03-2006, 23.20.54   #33
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
OK grazie proverò
Manugal non è collegato   Rispondi citando
Vecchio 30-03-2006, 16.58.08   #34
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Allora due punti mi sono un po' oscuri:

1 - Se ho un buffer di char e scrivo tramite la sprintf su questo buffer in realtà sto scrivendo delle stringhe (anche se ci metto dei numeri) e così non può andare se poi devo andarli a riversare su file.

2 - L'header è definito in questo modo:

Codice:
typedef struct{
   char name[DBF_NAME_LENGTH+1];
   short NumCampi;
   long NumRecords;
   short dimHeader;
   short dimRecord;
   long timestamp;
   campi campo[MAX_NUM_FIELDS];
}header;
Come vedi all'interno della struttura c'è un'altra struttura definita come campi. Questa come la passo al buffer?

Grazie.
Manugal non è collegato   Rispondi citando
Vecchio 30-03-2006, 17.46.37   #35
quipo.it
WT Assistant
 
L'avatar di quipo.it
 
Registrato: 19-12-2000
Loc.: Cambiano (Torino)
Messaggi: 591
quipo.it promette bene
Quota:
Originariamente inviato da Manugal
1 - Se ho un buffer di char e scrivo tramite la sprintf su questo buffer in realtà sto scrivendo delle stringhe (anche se ci metto dei numeri) e così non può andare se poi devo andarli a riversare su file.
why not?

Quota:
Originariamente inviato da Manugal
2 - L'header è definito in questo modo:

Codice:
typedef struct{
   char name[DBF_NAME_LENGTH+1];
   short NumCampi;
   long NumRecords;
   short dimHeader;
   short dimRecord;
   long timestamp;
   campi campo[MAX_NUM_FIELDS];
}header;
Come vedi all'interno della struttura c'è un'altra struttura definita come campi. Questa come la passo al buffer?
allo stesso modo, ricorsivamente... serializzi prima l'array, in un secondo momento serializzi gli altri campi + l'array h->campo serializzato in precedenza.

però forse ti conviene fare una funzione
char *serializeHeader(header h*) {}
che fa il tutto...

Non dico che sia l'unico metodo né il migliore, ma è forse il più pratico se devi poi leggere il file.
___________________________________

There are 10 kinds of people in this world,
those who can read binary and those who can't.

Care to say "thank you"?
quipo.it non è collegato   Rispondi citando
Vecchio 30-03-2006, 17.51.22   #36
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Quota:
why not?
Sinceramente non lo so... Vedendo il formato del buffer che è char allora ho pensato che forse non potesse andare bene.

Quota:
allo stesso modo, ricorsivamente... serializzi prima l'array, in un secondo momento serializzi gli altri campi + l'array h->campo serializzato in precedenza.
Ok, ma posso fare tutto questo anche in un solo buffer?

Manugal non è collegato   Rispondi citando
Vecchio 30-03-2006, 17.56.49   #37
quipo.it
WT Assistant
 
L'avatar di quipo.it
 
Registrato: 19-12-2000
Loc.: Cambiano (Torino)
Messaggi: 591
quipo.it promette bene
Quota:
Originariamente inviato da Manugal
Ok, ma posso fare questo anche in un solo buffer?
un buffer (tmp) temporaneo per contenere l'array h->campi[] serializzato, e uno (buf) per contenere gli altri campi+l'array serializzato prima. Una volta che hai serializzato tutto in buf, puoi liberare la memoria occupata da tmp e ritornare buf. BTW, ti conviene usare due separatori diversi per i due buffer...
___________________________________

There are 10 kinds of people in this world,
those who can read binary and those who can't.

Care to say "thank you"?
quipo.it non è collegato   Rispondi citando
Vecchio 30-03-2006, 18.02.19   #38
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Secondo le specifiche c'è un NULL che separa ogni campo (che sarebbe h->campo) mentre gli altri campi non sono separati. Infine, alla fine dell'header, ci sono 2 NULL. Come faccio a inserire questi NULL?
Manugal non è collegato   Rispondi citando
Vecchio 30-03-2006, 18.25.36   #39
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Ecco l'ho scritta. Però mi va in Segmentation Fault il penultimo test:

Codice:
char *serializeHeader(header *h, int NumFields){
   int i;
   char *buffer,*tmp;
   buffer=(char *)malloc(sizeof(h)*NumFields);
   tmp=(char *)malloc(sizeof(campi));
   for(i=0; i< NumFields; ++i)
      sprintf(tmp,"%s%d%d%d", h->campo[i].name,h->campo[i].fieldtype,h->campo[i].fieldlen,NULL);
   sprintf(buffer,"%s%d%d%d%d%d%s%d%d", h->name, h->NumCampi, h->NumRecords, h->dimHeader, h->dimRecord, h->timestamp, tmp, NULL, NULL);
   free(tmp);
   return buffer;
}
Manugal non è collegato   Rispondi citando
Vecchio 30-03-2006, 18.29.49   #40
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Corretta!!! Però al test della correttezza dell'algoritmo mi dà sempre 0 punti:

Codice:
char *serializeHeader(header *h, int NumFields){
   int i;
   char *buffer,*tmp;
   buffer=(char *)malloc(sizeof(h)+2);
   tmp=(char *)malloc(sizeof(campi)*NumFields+NumFields);
   for(i=0; i< NumFields; ++i)
      sprintf(tmp,"%s%d%d%d", h->campo[i].name,h->campo[i].fieldtype,h->campo[i].fieldlen,NULL);
   sprintf(buffer,"%s%d%d%d%d%d%s%d%d", h->name, h->NumCampi, h->NumRecords, h->dimHeader, h->dimRecord, h->timestamp, tmp, NULL, NULL);
   return buffer;
}
Forse è perché ho scritto male la fwrite?

Codice:
int ret=fwrite(buf,sizeof(buf),1,fp);
Manugal non è collegato   Rispondi citando
Vecchio 30-03-2006, 18.31.28   #41
quipo.it
WT Assistant
 
L'avatar di quipo.it
 
Registrato: 19-12-2000
Loc.: Cambiano (Torino)
Messaggi: 591
quipo.it promette bene
forse qualcosa del genere?

Codice:
tmp = (char *)malloc(sizeof(campi) * numcampi);
for(i=0; i< NumFields; ++i) {
    sprintf(tmp, "%s%d%d%d", h->campo[i].name, h->campo[i].fieldtype, h->campo[i].fieldlen, NULL);
}
buffer = (char *)malloc(sizeof(h) * NumFields + strlen(tmp));
sprintf(buffer, "%s%d%d%d%d%d%s%d%d", h->name, h->NumCampi, h->NumRecords, h->dimHeader, h->dimRecord, h->timestamp, tmp, NULL, NULL);
free(tmp);
return buffer;
___________________________________

There are 10 kinds of people in this world,
those who can read binary and those who can't.

Care to say "thank you"?
quipo.it non è collegato   Rispondi citando
Vecchio 30-03-2006, 18.41.30   #42
quipo.it
WT Assistant
 
L'avatar di quipo.it
 
Registrato: 19-12-2000
Loc.: Cambiano (Torino)
Messaggi: 591
quipo.it promette bene
prova con strlen(buf) al posto di sizeof(buf)

poi hai invertito il secondo e terzo parametro:

int ret = fwrite(buf, sizeof(char), strlen(buf), fp);
___________________________________

There are 10 kinds of people in this world,
those who can read binary and those who can't.

Care to say "thank you"?
quipo.it non è collegato   Rispondi citando
Vecchio 30-03-2006, 18.54.24   #43
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Come metto la free(tmp) mi appare questo:

*** glibc detected *** corrupted double-linked list: 0x08054638 ***

Se non la metto tutto ok. Però mi dà sempre 0 come punteggio. Ti posto il test che esegue: (mi manca solo questa cosa e poi ho finito tutto )

Codice:
for(;;)
	{
		ret = -1;

		fp = fopen("ProvaTest.dbf", "r");
		len = fread(buftest, sizeof(char), 500, fp);
		fclose(fp);

		fp = fopen("Prova.dbf", "r");
		len1 = fread(buf, sizeof(char), 500, fp);
		fclose(fp);
		if (len1 != len)
			break;

		// Confronto la prima parte (prima del timestamp)
		len = DBF_NAME_LENGTH+1+2+4+2+2;
		if (memcmp(buf, buftest, len))
			break;

		// Confronto la seconda parte (dopo il timestamp)
		if (memcmp(buf+len+4, buftest+len+4, len1-len-4))
			break;

		ret = LPC_OK;
		break;
	}
  if (ret == LPC_OK)
		test[numtest].passed = 1;
	numtest++;
Manugal non è collegato   Rispondi citando
Vecchio 30-03-2006, 18.56.16   #44
quipo.it
WT Assistant
 
L'avatar di quipo.it
 
Registrato: 19-12-2000
Loc.: Cambiano (Torino)
Messaggi: 591
quipo.it promette bene
mi mandi i files aggiornati?
___________________________________

There are 10 kinds of people in this world,
those who can read binary and those who can't.

Care to say "thank you"?
quipo.it non è collegato   Rispondi citando
Vecchio 30-03-2006, 19.01.08   #45
Manugal
Hero Member
 
L'avatar di Manugal
 
Registrato: 15-10-2000
Messaggi: 588
Manugal promette bene
Ok. Eccoli

http://rapidshare.de/files/16798532/dbf.tar.gz.html
Manugal non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Parole in musica gemma Chiacchiere in libertà 415 03-06-2007 05.24.48
GENERAL PROTECTION FAULT Slith Hardware e Overclock 8 24-06-2005 20.51.57
Quiz: Versi di canzoni tisifone Chiacchiere in libertà 55 02-07-2004 19.13.03
fault in ms-dos extender marcofitaly Windows 9x/Me/NT4/2000 1 27-05-2004 23.45.27

Orario GMT +2. Ora sono le: 09.27.38.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.