Précédent   Forum des professionnels en informatique > Environnements de développement > WinDev
WinDev Forum d'entraide sur la programmation en WinDev
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2012, 10h04   #1
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
Par défaut Problème concaténation dans un fichier.txt

Bonjour à tous !

Je viens une nouvelle fois vous consulter car j'ai un soucis et malgré des recherches dans aide et sur le web, je n'arrive pas à résoudre mon soucis.

En gros je souhaite enregistrer dans un fichier texte das information à la suite qui doit au finale faire x caractères !

Certaines des variables ne sont pas renseigné mais le nombres de caractère correspondant a celle-ci doit tout de même être pris en compte.

Voici le code que j'ai mis en place :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//ENTETE VALEURS

//Entête chaîne
sTypeEnreg = "00"
sTypeLiqui = "LS"
sRefExtFourCommande = Complète(" ",15)
sTypeCodifRefExt = Complète(" ",2)
sNumFourExtCommande = Complète(" ",35)
sRefExtBeneMandat = Complète(" ",15)
sTypeCodifRefExtBeneMandat = Complète(" ",2)
sCodeBanqGuichet = Complète(" ",10)
sNumCompteBanc = Complète(" ",15)
sCleRib = Complète(" ",2)
sTypeDomici = Complète(" ",1)
sCodeGestCommande = "JV" //a modif
sCodeOpe = Complète(" ",10)
sObjetDepense = "AAAAAAAAAAAAAAAAAAAAAAAAA" // a modif
sReffacture = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" //a modif
sCommenFact = "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" //a modif
sSigneMontNetFact = "+" 
sSigneMontantHT = "+"
sSigneMontTTC = "+"
sRefAvoir = Complète(" ",35)
sSigneMontHTAvoir = "+"
sSigneMontTTCAvoir = "+"
sSigneTauxEscompte = "+"
sSigneMontantEscompte = "+"
sActiviteTaxa = "P" //a modif
sTypeDeNbr = Complète(" ",2)
sConditionPaiement = Complète(" ",2)
sModePaiement = Complète(" ",2)   //252 caractères

//Entête Entier
nEntJuri = "032"
nNumFourCommande = "000000" //a modif
nBenefDuMandat = Complète(" ",6,0)
nExercice = "2012" //a modif
nNumEnregFact = Complète("  ",6,0)
nIndicCreationFact = Complète(" ",1,0)
nCodeTVA = "04" //a modif
nIndicAvoir = Complète(" ",1,0)
nDelaiPaiement = Complète(" ",3,0)
nJourTombePaiement = Complète(" ",2,0)
nIndicAnnula = Complète(" ",1,0)
nNumLiquiAnnula = Complète(" ",6,0)
nNumLiquiOrigine = Complète(" ",6,0)   //47 caratères

//Entête Réel
rMontantNetFact = "111111111111111" //a modif
rMontantHT = "222222222222222" //a modif
rTauxTVA = "1960" //a modif
rMontantTTC = "333333333333333" //a modif
rMontantHTAvoir = Complète(" ",15,0)
rTauxTVAAvoir = Complète(" ",4,0)
rMontantTTCAvoir = Complète(" ",15,0)
rTauxEscompte = Complète(" ",6,0)
rMontantEscompte = Complète(" ",15,0)
rProtaraTVADedu = "0270"
rTauxRemiseGlobal = Complète(" ",5,0)   //113 caratères

//Entête Date
dDatPrevisioMandat = Complète(" ",8,0)
dDateRecep = "2000/01/01" //a modif
dDateFact = "2000/02/02" //a modif
dDateArriveFact = "2000/02/02" //a modif
dDateEcheance = Complète(" ",8,0)  //40 caractères     TOTAL ENTETE 452 caratères???

// Création du fichier externe Entete
ResCreationEntete est une chaîne
ResCreationEntete = fCrée("C:\Mes Projets\Projet LSCP\ExportEntete.txt")
SI ResCreationEntete <> -1 ALORS 
	...
FIN

EnregEntete est une chaîne = (sTypeEnreg+sTypeLiqui+nEntJuri+nNumFourCommande+sRefExtFourCommande+sTypeCodifRefExt+sNumFourExtCommande+nBenefDuMandat+sRefExtBeneMandat+sTypeCodifRefExtBeneMandat+sCodeBanqGuichet+sNumCompteBanc+sCleRib+sTypeDomici+dDatPrevisioMandat+nExercice+sCodeGestCommande+sCodeOpe+sObjetDepense+dDateRecep+sReffacture+nNumEnregFact+nIndicCreationFact+sCommenFact+dDateFact+dDateArriveFact+sSigneMontNetFact+rMontantNetFact+sSigneMontantHT+rMontantHT+rTauxTVA+sSigneMontTTC+rMontantTTC+nCodeTVA+sRefAvoir+sSigneMontHTAvoir+rMontantHTAvoir+rTauxTVAAvoir+sSigneMontTTCAvoir+rMontantTTCAvoir+sSigneTauxEscompte+rTauxEscompte+sSigneMontantEscompte+rMontantEscompte+sActiviteTaxa+rProtaraTVADedu+nIndicAvoir+rTauxRemiseGlobal+nDelaiPaiement+sTypeDeNbr+sConditionPaiement+nJourTombePaiement+sModePaiement+dDateEcheance+nIndicAnnula+nNumLiquiAnnula+nNumLiquiOrigine)

IdFichierEntete est un entier
ResEcritureEntete est une chaîne
IdFichierEntete = fOuvre("C:\Mes Projets\Projet LSCP\ExportEntete.txt", foLectureEcriture)

SI IdFichierEntete <> -1 ALORS
	// Écriture dans ce fichier
	ResEcritureEntete = fEcrit(IdFichierEntete,EnregEntete)
	Info("Votre fichier d'export entête à bien été crée")
	SI ResEcritureEntete <> -1 ALORS
		// ...
	FIN
FIN
Normalement je devrais avoir 452 caractères or quand j'ouvre mon fichier avec notepad je n'ai que 350 caractères environ.

Je pense que cela viens de la concaténation de mes différente variable qui pose problème.

Enfin la concaténation doit ce faire exactement dans l'ordre que j'ai fait dans mon code.

Merci par avance.
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 10h10   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 099
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 099
Points : 1 929
Points : 1 929
Bonjour,
Je pense que tu devrais jeter un oeil sur l'aide en ligne de la fonction complete:
Code :
1
2
<Résultat> = Complète(<Chaîne à compléter> , <Taille> [, <Caractère>])
Tu fais:
Code :
1
2
sRefExtBeneMandat = Complète(" ",15)
Alors que d'après l'aide en ligne, tu devrais mlutôt faire ceci:!
Code :
1
2
sRefExtBeneMandat = Complète(sRefExtBeneMandat,15," ")
D'ailleurs si tu mets un point d'arrêt sur la première ligne, et que tu regardes le contenu de tes variables en traçant le code ligne par ligne, tu devrais voir que le contenu de ces dernière n'est pas ce que tu attends.

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/02/2012, 10h16   #3
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
Ah je pensais que ma fonction complète était correct.

Je vais modifier mes variables et re tester.

Je vous tiens au courant.
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 10h25   #4
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 099
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 099
Points : 1 929
Points : 1 929
D'ailleurs en passant, pour formater les numériques tu devrais regarder aussi NumeriqueVersChaine(), qui ira certainement mieux de Complete().

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/02/2012, 10h50   #5
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
J'ai changé tous mes complète et cela n'a rien changé j'ai toujours 367 caractères au lieu de 452.
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 10h56   #6
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
Pour le numériqueverschaîne je fais par exemple :

nBenefDuMandat = Complète(nBenefDuMandat,6," ")

nBenefDuMandat = numériqueverschaîne(" ", " ")

Je peux faire un numérique vers chaines alors que ma variable est vide et que je veux quelle soit complété par des espaces?
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 10h57   #7
Membre Expert
 
Avatar de frenchsting
 
Homme Claude
Développeur informatique
Inscription : juin 2003
Messages : 940
Détails du profil
Informations personnelles :
Nom : Homme Claude
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2003
Messages : 940
Points : 1 337
Points : 1 337
Citation:
Envoyé par tatayo Voir le message
D'ailleurs en passant, pour formater les numériques tu devrais regarder aussi NumeriqueVersChaine(), qui ira certainement mieux de Complete().

Tatayo.
Tu ne peut pas écrire
Code :
MonReel = repete(" ",15)
C'est illogique.

tu as bien fait ça :
Code :
1
2
3
4
MaChaine += Numeriqueverchaine(MonReel,"10.2f")
MaChaine += Numeriqueverchaine(MonEntier, "03d")
...
FecritLigne(HandleFichier,Machaine)
par exemple ?
frenchsting est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h01   #8
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
Euh non je nai pas fait cela ... il faut que pour tout mes entiers réels et date je fasse cela??? parcontre je veux des espaces et pas des 0 pour compléter ma variable vide ...
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h02   #9
Membre éclairé
 
Avatar de jimmypage
 
Homme
Développeur informatique
Inscription : novembre 2006
Messages : 193
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2006
Messages : 193
Points : 340
Points : 340
Envoyer un message via MSN à jimmypage Envoyer un message via Skype™ à jimmypage
Salut,

ca serait plutôt

Code :
1
2
nBenefDuMandat = Complète(numeriqueVersChaine(nBenefDuMandat),6," ")
jimmypage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h05   #10
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
Je vais essayer ceci.
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h05   #11
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 099
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 099
Points : 1 929
Points : 1 929
Citation:
Envoyé par juliendu01 Voir le message
Pour le numériqueverschaîne je fais par exemple :

nBenefDuMandat = Complète(nBenefDuMandat,6," ")

nBenefDuMandat = numériqueverschaîne(" ", " ")

Je peux faire un numérique vers chaines alors que ma variable est vide et que je veux quelle soit complété par des espaces?
Si tu veux compléter tes numériques par des espaces, alors effectivement NumeriqueVersChaine n'est pas la bonne piste.

Par contre tu ne peux pas affecter une chaine à un numérique, ça ne fonctionne pas !*
D'ailleurs " " n'est pas un numérique, ni un format, donc numériqueverschaîne(" ", " ") n'a aucun sens...
Par contre tu peux faire ainsi:
Code :
1
2
sChaine = complete(nBenefDuMandat,6," ")
Tatayo.

* En fait si, dans certains cas Windev fait la conversion, mais ici tu pers les espaces que tu vient d'ajouter.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h13   #12
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
Citation:
Envoyé par jimmypage Voir le message
Salut,

ca serait plutôt

Code :
1
2
nBenefDuMandat = Complète(numeriqueVersChaine(nBenefDuMandat),6," ")
cela n'a rien changé ...

Je vais faire ce que tu as dit tatayo.
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h16   #13
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
En gros tatayo tout mes entiers, réels, dtae qui ne sont pas renseigné je les déclare comme étant une chaine ? c'est cela?
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h16   #14
Membre chevronné
 
Avatar de wimbish
 
Homme Christophe Vibert
Développeur informatique
Inscription : octobre 2006
Messages : 292
Détails du profil
Informations personnelles :
Nom : Homme Christophe Vibert
Âge : 38
Localisation : France, Manche (Basse Normandie)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 292
Points : 632
Points : 632
Bonjour Juliendu01,

Pour simplifier ta recherche de Bug, je te conseil d'user du débugger Windev.
En contrôlant le contenu de tes variables, tu te serais aperçu que le problème venait des variables de type Numérique et Date.

Si une fonction ne fait pas ce que tu lui demande, exécute la pas à pas pour contrôler exactement ce qu'elle fait.

Cette bonne habitude te permettra de développer beaucoup plus vite.
wimbish est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/02/2012, 11h16   #15
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 099
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 099
Points : 1 929
Points : 1 929
Normal, tu affectes une chaine dans un entier ...

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h24   #16
Membre éclairé
 
Avatar de jimmypage
 
Homme
Développeur informatique
Inscription : novembre 2006
Messages : 193
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2006
Messages : 193
Points : 340
Points : 340
Envoyer un message via MSN à jimmypage Envoyer un message via Skype™ à jimmypage
Citation:
Envoyé par juliendu01 Voir le message
cela n'a rien changé ...

Je vais faire ce que tu as dit tatayo.
bien entendu nBenefDuMandat doit tre une chaîne ...
jimmypage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h28   #17
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
donc toutes mes variables du type entier, réel et date qui ne sont pas renseigné je les déclarent comme étant des chaines?
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h36   #18
Membre chevronné
 
Avatar de wimbish
 
Homme Christophe Vibert
Développeur informatique
Inscription : octobre 2006
Messages : 292
Détails du profil
Informations personnelles :
Nom : Homme Christophe Vibert
Âge : 38
Localisation : France, Manche (Basse Normandie)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 292
Points : 632
Points : 632
La fonction fecrit attend une chaîne de caractères en entrée.
Tu as donc deux solutions:
soit :
Code :
1
2
Date est une date = 20120101
fecrit(numfic, dateverschaine(Date,"AAAA/MM/JJ")
Soit:
Code :
1
2
Date est une chaine = "2012/01/01"
fecrit(numfic,Date)
idem pour les autres types.
wimbish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h42   #19
Futur Membre du Club
 
Inscription : janvier 2012
Messages : 171
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 171
Points : 16
Points : 16
Je dois avouer que je mélange tous la ....

J'ai du mal à voir ce que je dois faire au final...

Donc par exemple je dois faire quoi pour que ce la soit correcte :
Code :
1
2
3
4
5
6
7
8
9
10
//Entête Entier
nBenefDuMandat = Complète(NumériqueVersChaîne(nBenefDuMandat),6," ")

//Entête Réel
rMontantHTAvoir = Complète(NumériqueVersChaîne(rMontantHTAvoir),15," ")

//Entête Date
dDatPrevisioMandat = Complète(NumériqueVersChaîne(dDatPrevisioMandat),8," ")
dDateRecep = "20000101" //a modif
Désolé mais je suis vraiment perdu ... merci.
juliendu01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 11h50   #20
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 099
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 099
Points : 1 929
Points : 1 929
Effectivement, tu mélanges tout...
Code :
1
2
nBenefDuMandat = Complète(NumériqueVersChaîne(nBenefDuMandat),6," ")
Ne fonctionne pas car tu affectes une chaine (le retour de complète) à une variable de type entier. Tu dois l'affecter à une variable de type chaine.
Code :
1
2
rMontantHTAvoir = Complète(NumériqueVersChaîne(rMontantHTAvoir),15," ")
Idem...
Code :
1
2
dDatPrevisioMandat = Complète(NumériqueVersChaîne(dDatPrevisioMandat),8," ")
La tu tentes de traduire une date vers une chaine en utilisant NumeriqueVersChaine au lieu de DateVersChaine, et tu affectes la chaine résultante.. à une variable de type date.

Tu dois prendre tes variables, les formater et affecter le résultat à une variable de type chaine.

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h08.


 
 
 
 
Partenaires

Hébergement Web