Formatage d'un fichier TXT.

deis78 Messages postés 1 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 19 juin 2008 - 19 juin 2008 à 14:38
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 19 juin 2008 à 22:24
Bonjour à tous,

Je dois constituer à partir de ACCESS un fichier txt avec un formatage bien précis quant à la longueur et la position des différents champs.
Dans la construction de mon fichier, je n'arrive pas à considérer une zone à blanc enfin de champs comme étant un espace.

Prenons un exemple :

Soient un champs NOM (taille max 10 caracteres) et un champs PRENOM (taille max 10 caracteres) .
Si la saisie dans la table est DUPONT et Marcel le résultat de la requête [NOM]&[PRENOM] donne : DUPONTMarcel.

Je souhaiterai obtenir le résultat DUPONT    Marcel (l'espace doit correspondre à 10 caractères - les 6 du nom soit 4 caractères).En d'autres termes le nombre d'espaces est variable en fonction du nombre de caractères du nom.

Avez vous une idée sur la marche à suivre.

Merci pour votre collaboration.
Sand

3 réponses

HCJarod Messages postés 221 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 11 décembre 2008 1
19 juin 2008 à 15:29
quelles fonctions utilise tu pour écrire dans ton fichier txt?

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
19 juin 2008 à 18:21
Bonjour,

Avec printf() on peut faire beaucoup au niveau formatage !
Petit exemple avec des sprintf() pour formater un buffer :

#include <stdio.h>



int main(int argc,char** argv)
{
   char  szBuffer[256];
   char* szNom    = "DUPONT";
   char* szPrenom = "Jean-Christophe";




   // --- Les 2 champs font 10 caractères et sont cadrés à gauche (-)
   // --- mais il peut y avoir dépassement de la longueur demandée
   sprintf(szBuffer,"%-10s%-10s",szNom,szPrenom);
   printf("[%s]\n",szBuffer);




   // --- Les 2 champs font 10 caractères et sont cadrés à gauche (-)
   // --- mais la longueur demandée est préservée (.10)

   sprintf(szBuffer,"%-10.10s%-10.10s",szNom,szPrenom);
   printf("[%s]\n",szBuffer);




   // --- La même chose mais avec la longueur paramétrable
   int iLongueur = 10;
   sprintf(szBuffer,"%-*.*s%-*.*s"
          ,iLongueur,iLongueur,szNom
          ,iLongueur,iLongueur,szPrenom);
   printf("[%s]\n",szBuffer);
   return 0;
}


Ce qui donne :

[12345678901234567890]
[DUPONT    Jean-Christophe]
[DUPONT    Jean-Chris]
[DUPONT    Jean-Chris]



Jean-François
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juin 2008 à 22:24
requête [NOM]&[PRENOM] donne : DUPONTMarcel

mauvaise idée une telle requête qui retourne en 1 champ unique, il te sera impossible de séparer les 2 termes.

char buf[24], *c, *d, a;
int i;


c = nom;
d = buf;
i = 0;
while(a = *c++) {
  *d++ = a;
  if(++i == 10) break;
}
while(i < 10) {*d++ = 32; i++;}
c = prenom;
i = 0;
while(a = *c++) {
  *d++ = a;
  if(++i == 10) break;
}
while(i < 10) {*d++ = 32; i++;}
*d = 0;

ciao...
BruNews, MVP VC++
0
Rejoignez-nous