Newsgroup: it.comp.software.database
Titolo: che tipo di db è?

i file del db sono diversi,si tratta di un controllore di cassa via pc x
caricare i codici a barre e le altre opzioni,i file sono in formato .dat di
tipo binario ho queste informazioni x ogni file: esempio questo č il
plu_db.dat
 /***  PLU  ***/
        record plu_db
        {
         unique key char acCodPlu[17];
         char acDescrPlu[21];
         char vcBit; /*
                      bit 0,1   --> Prezzo Obbligatorio
                      bit 3,2   --> Max cifre significative sulla
moltiplicazione
                      bit 6,5,4 --> Max moltiplicazioni per PLU
                      bit 7     --> Stato del PLU
                     */
         char acPrezzo[5];  /*formato 5 digit base 256 (terminatore
escluso)*/
         char acTipo[5];
         char acHalo[5];    /*formato 5 digit base 256 (terminatore
escluso)*/
         char acLalo[5];    /*formato 5 digit base 256 (terminatore
escluso)*/
         char vcBitIvaFlag; /*
                             bit 7,6,5   --> EAN2
                             bit 4       --> Prezzo Modificabile
                             bit 3,2,1,0 --> Indice SLOT nella tabella IVA
                                             (valori da 0 a 15)
                            */
         char vcBitFlag; /*
                          bit 7       --> Reso
                          bit 6       --> Plu Single Item
                          bit 5       --> Vidima
                          bit 4       --> Stringa
                          bit 3,2     --> Quantit.
                          bit 1       --> Sconto Subtotale
                          bit 0       --> Scontabile
                         */
        }
devo caricare i plu dei miei fornitori di cui ho dei txt, quelli della cassa
dicono di fare a mano...non si puo convertire?
Grazie

          char vcBit; /*
Sembra Raima... a vederlo cosi'. Comunque no, non esistono dei
convertitori. Se hai i file .txt non dovrebbe comunque essere difficile.
Davide

 ha scritto nel messaggio
news:amsoid$8lpiq$5...@ID-18487.news.dfncis.de...

A me sembra tanto una struct del C... tranne che al posto di struct c'è
record.
M.

 record.
Si' appunto. In Raima funziona cosi': tu definisci la "struct" che e'
in sostanza il record, poi gli dici di crearti la tabella e lui crea
i file. Somiglia un po' ad un compilatore. E' tipico dei database
file-based ISAM di avere il "record" definito come una struct, in quanto
in fondo quando la libreria legge un record non fa' altro che caricare
byte dentro una struttura in memoria.
Davide

 > A me sembra tanto una struct del C... tranne che al posto di struct c'č


plu_db.dat
Ti servirebbe un compilatore C.
Per esempio questo

diventa questo: lo salvi in un file "converti.c", poi il comando
	gcc -o converti converti.c
crea un file "converti" che, lanciato come
	converti < pippo.dat > pippo.xls
ti da' un file Excel compatibile (ASCII tab delimited). Con poco sforzo si
puo' convertirlo in SQL, o creare un "converti.c" che sputi fuori SQL.
Cerca anche "RTD2SQL" su Google, o "Raima ODBC": non so se questa roba sia
RAIMA, ma se lo e', val la pena controllare.
#include <stdio.h>
#include <string.h>
#define	PADDING		0
#define LITTLE_ENDIAN
#undef	BIG_ENDIAN
#define	LONGSHORT
#undef	SHORTLONG
#ifdef LITTLE_ENDIAN
#define	BIT0	128
#define	BIT1	64
#define	BIT2	32
#define	BIT3	16
#define BIT4	8
#define BIT5	4
#define BIT6	2
#define BIT7	1
#else
#define	BIT0	1
#define	BIT1	2
#define	BIT2	4
#define	BIT3	8
#define BIT4	16
#define BIT5	32
#define BIT6	64
#define BIT7	128
#endif
double horner(unsigned char *s, size_t n)
{
	size_t	i;
	int	x;
	double result = 0;
	for (i=0; i <= n; i++)
	{
#ifdef LONGSHORT
		x = s[i];
#else
		x = s[n-i];
#endif
		result *= 256;
		result += x;
	}
	return result;
}
int main()
{
	struct 
        {
		char acCodPlu[17 + PADDING];
		char acDescrPlu[21 + PADDING];
		char vcBit;
		char acPrezzo[5 + PADDING];  
		char acTipo[5 + PADDING];
		char acHalo[5 + PADDING];
		char acLalo[5 + PADDING];
		char vcBitIvaFlag;
		char vcBitFlag; 
	} INPUT;
	printf("La dimensione del record e' %d bytes\n", sizeof(INPUT));
	// Leggere il file a blocchi
	while(!feof(stdin))
	{
		fread(&INPUT, sizeof(INPUT, 1, stdin);
		// Abbiamo letto un blocco; ora lo inviamo in output,
		// tradotto.
		printf("%-17.17s\t", INPUT.acCodPlu);   // Campo di 17 car
		printf("%-21.21s\t", INPUT.acDescrPlu); // Altro campo char
		// Ora c'e' vcbit, che e' un campo codificato
//              bit 0,1   --> Prezzo Obbligatorio
printf("%-3.3d\t",(INPUT.vcbit&(BIT0|BIT1))/min(BIT0,BIT1));
//              bit 3,2   --> Max cifre significative sulla moltiplicazione
printf("%-3.3d\t",(INPUT.vcbit&(BIT2|BIT3))/min(BIT2,BIT3));
//              bit 6,5,4 --> Max moltiplicazioni per PLU
printf("%-3.3d\t",(INPUT.vcbit&(BIT4|BIT5|BIT6))/min(BIT4,BIT6));
//              bit 7     --> Stato del PLU
		printf("%-3.3d\t",(INPUT.vcbit&(BIT7))/min(BIT7,BIT7));
		// Ora c'e' acPrezzo che e' un campo NUMERICO
		printf("%f\t", horner(INPUT.acPrezzo, 5));
		/*
		Il resto e' lasciato per esercizio allo studente
		char acPrezzo[5 + PADDING];  
		char acTipo[5 + PADDING];
		char acHalo[5 + PADDING];
		char acLalo[5 + PADDING];
		char vcBitIvaFlag;
		char vcBitFlag; 
		*/
		printf("\n");			// Fine record
	}
}
Ci sono alcune cose cui fare attenzione, e ti ci vorranno un po' di prove.
Il file dovrebbe essere lungo esattamente un multiplo intero del record, e
"converti" all'inizio ti dice quanto CREDE che sia lungo. PADDING puo', da
un sistema DB all'altro, essere 0 oppure 1; io qui ho messo 0 ma se avessi
un record "corto" prova a mettere 1.
Se i flags sono completamente a puttane puo' essere il bit ordering che e'
big endian anziche' little endian: scambia fra loro #define e #undef.
Se il prezzo e' completamente fuori di melone, "LONGSHORT" potrebbe essere
"SHORTLONG".
Avendo molta sfiga e andando alla cieca, all'ottavo tentativo riesci :-) -
se fai prove mirate, nel caso peggiore ce la fai al terzo.
Male male, trovi un povero Cristo che ti scriva il software, modificando i
sorgenti qui sopra che sono GPL :-). E sempre ringraziétte a PADREPIO.
Leonardo (ŕme)
-- 
".signature": bad command or file name