Fichier avec séparateur

ticalimero Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 26 février 2004 - 26 févr. 2004 à 10:19
ticalimero Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 26 février 2004 - 26 févr. 2004 à 13:50
Bonjour,
Je dois alimenter un fichier constitué d'un enreg entête, plusieurs enreg détail, et un enreg fin.
Les champs de chaque enreg doivent être séparés par un séparateur ";".
J'ai créé des structures pour chaque type d'enregistrement :

Par exemple, pour l'entête :
typedef struct
{
char idfic [LONG_IDFIC+1];
char datetrt [LONG_DATETRT+1];
char heuretrt [LONG_HEURETRT+1];
char nseqfic [LONG_NSEQFIC+1];
char end [1];
} T_REC_ENT;

Je souhaiterais insérer le séparateur comme constante dans ma structure, entre chaque champ, mais je ne sais pas comment faire.

#define SEP ';'

Avez-vous des idées ????

Merci pour vos réponses

8 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2004 à 10:58
Pourquoi une struct avec taille fixe dans un fichier delimite ???
char buff[512]; // tu verras si suffit
DWORD r;
char *c, *d;
d = buff; // ce qu'on tamponnera dans fichier
// on entre le 1er enreg
c = champ1; // serait buffer du 1er enreg
while(*d = *c++) d++; // champ1 passe dans buff
*d++ = ';';
// on entre le 2eme enreg
c = champ2; // serait buffer du second enreg
while(*d = *c++) d++; // champ1 passe dans buff
*d++ = ';';

etc pour tous les champs, a la finale:*d++ '\r'; *d++ '\n';
WriteFile(hfl, buff, d - buff, &r, 0);

ciao...
BruNews, Admin CS, MVP Visual C++
0
ticalimero Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 26 février 2004
26 févr. 2004 à 12:44
J'ai fais comme ca , mais je trouve pas ca super propre, y a pas une autre solution ???

typedef struct
{
char idfic [LONG_IDFIC];
char sep1;
char datetrt [LONG_DATETRT];
char sep2;
char heuretrt [LONG_HEURETRT];
char sep3;
char nseqfic [LONG_NSEQFIC];
char sep4;
char end [1];
} T_REC_COM_ENT;

memset(enr, ' ' , LONG_ENR_ENT);
memcpy(enr->nseqfic, sznseqfictmp , LONG_NSEQFIC);
enr->sep1 = SEP;
memcpy(enr->datetrt, szdatetmp , LONG_DATETRT);
enr->sep2 = SEP;
memcpy(enr->heuretrt, szheuretmp , LONG_HEURETRT);
enr->sep3 = SEP;
memcpy(enr->idfic, szidfictmp , LONG_IDFIC);
enr->sep4 = SEP;
memcpy(enr->end, "\n" , 1);

Merci

:shy)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2004 à 12:58
Mais tu as fini par te poser la question:
Struct a longueur fixe OU delimiteur de champ ???
C'est l'un ou l'autre mais pas les 2.
Si tu ecris des struct, plus besoin de delimiteur de champ.
Si est fichier avec delimiteur de champ, vire ta struct inutile.

ciao...
BruNews, Admin CS, MVP Visual C++
0
ticalimero Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 26 février 2004
26 févr. 2004 à 13:12
L'un n'empêche pas l'autre,
Struct à longueur fixe avec ; entre chaque champ, tu comprends ?

toto ;12365;25022004;lalalalala ;
tututu ;122 ; ;lililililililililili ;

Alors, c koi la solution ?
:shy)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2004 à 13:17
Alors si tu optes pour struct longueur fixe, t'emmerde pas avec separateur, il est inutile puisque suffira d'aspirer des structs pour recup les enregs.

On ne met jamais l'un ET l'autre.

ciao...
BruNews, Admin CS, MVP Visual C++
0
ticalimero Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 26 février 2004
26 févr. 2004 à 13:20
Si, on fait l'un et l'autre pasque le client nous l'a demandé !!!!!!!!!
mon prog formate le fichier et c'est tout !
Alors comment dois-je faire pour ajouter un ";" entre chaque champ ???????????? à part ma solution hyper lourde !!!

:shy)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2004 à 13:37
OK fallait preciser, si est demande client, meme stupide faut faire puisqu'il paie, evident.

typedef struct
{
char idfic [LONG_IDFIC+1];
char datetrt [LONG_DATETRT+1];
char heuretrt [LONG_HEURETRT+1];
char nseqfic [LONG_NSEQFIC+1];
char end;
} T_REC_COM_ENT;

T_REC_COM_ENT enr;
memset(enr, 0 , sizeof(T_REC_COM_ENT));
enr->idfic[LONG_IDFIC] = ';' // 3 autres idem
enr->end = '\n';
Tout cela 1 seule fois.

ensuite si est dans boucle, fais un strcpy ou memset suivant cas sur chaque champ et tu tamponnes.

ciao...
BruNews, Admin CS, MVP Visual C++
0
ticalimero Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 26 février 2004
26 févr. 2004 à 13:50
Merci bcp !
Ca a l'air de fonctionner !

:shy)
0
Rejoignez-nous