IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Génération fichier Texte format AFB120


Sujet :

WinDev

  1. #1
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut Génération fichier Texte format AFB120
    Bonsoir tout le monde,

    Voilà, je suis en train de finaliser une petite application qui permet à partir d'un fichier texte en entrée de récupérer certaines informations, et de génération un fichier texte en sortie mais qui a une structure bien différente, celle ci Structure de fichier AFB120.

    Ma méthodologie :

    Consiste à parcourir chaque ligne du fichier en input, et à chaque fois que je rencontre une occurrence d'un motif souhaité, je la récupère dans une table.

    Problème :

    Mon code me génère des informations qui ne sont même pas contenu dans la base, et je n'arrive pas à comprendre pourquoi. Les traces et infos m'indiquent clairement que tout est correct

    Je peux vous joindre un exemple de fichier en input ici ORANGE 16.txt, et l'Output correspondant souhaité ORANGE_MALI_160118.TXT. Et les bouts de codes :

    Intégration du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    sFichier est une chaîne
    //On récupère le fichier sur le disque
    sFichier = fSélecteur("C:\","Sélectionner un fichier","Fichier Texte (*.TXT)" + TAB + "*.txt" + RC + "Tous" + TAB + "*.*", "txt")
     
    nIDFichier est un entier
    sMdebit est une chaîne
    sMcredit est une chaîne
    Mtcredit est une chaîne
    sdAteVal est une chaîne
    sDebit est une chaîne
    sCredit est une chaîne
    Mtdebit est une chaîne
    sNcompte est une chaîne
    sDevise est une chaîne
    sOldSoldeDate est une chaîne
    sNewSoldeDate est une chaîne
    sLigne est une chaîne= ""
     
    //On ouvre le fichier en Lecture/Ecriture
    nIDFichier = fOuvre(sFichier, foLectureEcriture)
     
    SI nIDFichier = -1 ALORS
    	Erreur(ErreurInfo(errMessage))
    SINON
     
    	//On vide la table
    	HSupprimeTout(AFB120)
     
    	sLigne = fLitLigne(nIDFichier)
     
    	TANTQUE nIDFichier<>-1 
     
    		sLigne = fLitLigne(nIDFichier)
    		sPos2 est une chaîne = sLigne[[1 sur 93]]
    		//Si Fin de fichier on sors
     
    		SI Milieu(sPos2,19,1) = "*" ALORS
    			SORTIR
    		FIN
     
    		SI Milieu(sPos2,2,6) = "Compte" ALORS
     
    			//On récupère le compte et la dévise
    			sNcompte = Milieu(sPos2,14,12)
    			AFB120.NCompte=sNcompte
    			sDevise = Milieu(sPos2,35,3)
    			AFB120.Devise=sDevise	
    		FIN
     
    		SI Milieu(sPos2,5,20) = "SOLDE PRECEDENT AU :" ALORS
     
    			sOldSoldeDate = Milieu(sPos2,26,8)
     
    			//Recupération du montant au débit de l'ancien solde
     
    			sDebit = Remplace(SansEspace(Milieu(sPos2,61,16))," ","")
     
    			SI sDebit <> "" ALORS
    				sDebit = "-"+sDebit
    				SOCIETE.MontantAncienSolde = sDebit
    			FIN
     
    			//Recupération du montant au crédit de l'ancien solde
     
    			sCredit = Remplace(SansEspace(Milieu(sPos2,78,16))," ","")
     
    			SI sCredit <> "" ALORS
    				sCredit = "+"+sCredit
    				SOCIETE.MontantAncienSolde = sCredit
     
    			FIN
     
    		FIN
     
    		//Test si DateVal est présent
     
    		SI EstNumérique(Milieu(sPos2,54,6)) > 0 ALORS
     
    			//Trace(Milieu(sPos2,54,6))
    			//Récupère la date val
    			sdAteVal = Remplace(Milieu(sPos2,54,6)," ","")
     
    			SI sdAteVal="" ALORS
    				AFB120.DateValeur=""
    			SINON
     
    				SI Taille(sdAteVal) = 6 ALORS
    					AFB120.DateValeur = sdAteVal
    				FIN
     
    			FIN
     
     
    		SI 	sdAteVal <> "" 
    			//Récupère le libéllé
    			Lib est une chaîne = Milieu(sPos2,3,56)
    			AFB120.Libelle = Lib
     
    			//Montant Débit/Crédit du mouvement
     
    			Mtdebit = SansEspace(Milieu(sPos2,61,16))
    			Mtcredit = SansEspace(Milieu(sPos2,78,16))
     
    			SI Mtdebit = "" ALORS
    				AFB120.MontantDebit = ""
    				AFB120.MontantCredit = "+" + Mtcredit
    			SINON
    				AFB120.MontantDebit = "-" + Mtdebit
    				AFB120.MontantCredit = ""
    			FIN
     
    		FIN
    		HAjoute(AFB120)	
     
    		SI Milieu(sPos2,8,18) = "NOUVEAU SOLDE AU :" ALORS
     
    			//On récupère la date
    			sNewSoldeDate = Milieu(sPos2,27,8)
     
    			//On récupère le montant du solde soit en débit soit en crédit
     
    			sMdebit = "-" + SansEspace(Milieu(sPos2,61,16))
    			sMcredit = "+" + SansEspace(Milieu(sPos2,78,16))
     
    		FIN		
    		//Ligne suivante
    		sLigne = fLitLigne(nIDFichier)
    	FIN
    	//**
     
    	//Ecriture dans les tables
    	SI COMBO_Choisissez_une_société.COL_Nom_SOCIETE = "" ALORS
    		Info("Merci de choisir une société !!!")
    	FIN
     
    	HLitRecherchePremier(SOCIETE,SOCIETE.Nom_SOCIETE,COMBO_Choisissez_une_société)
     
    	SI HTrouve(SOCIETE) ALORS
     
    		SOCIETE.DateAncienSolde = Remplace(sOldSoldeDate,".","")
     
    		SI sMdebit = "" ALORS
     
    			SOCIETE.MontantAncienSolde = sCredit
     
    		SINON
     
    			SOCIETE.MontantAncienSolde = sDebit
    		FIN
     
    		//FIN
     
    		SOCIETE.DateNouveauSolde = Remplace(sNewSoldeDate,".","")
     
    		SI sMdebit = "" ALORS
    			SOCIETE.MontantNouveauSolde = sMcredit
     
    		SINON
    			SOCIETE.MontantNouveauSolde = sMdebit
     
    		FIN
    		HModifie(SOCIETE)
    	FIN
     
     
     
    FIN	// **		
    FIN
     
     
    Info("Importation terminée avec succès !!!!")

    Génération de l'AFB120 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    // Déclaration et initialisation des variables
     
    IDFichier est un entier
    ResEcrit est un booléen = Vrai
    ResFermeFichier est un entier
    dDancienSolde est une Date
    dDnouveauSolde est une Date
    sOldMontantSolde est une chaîne
    sNewMontantSolde est une chaîne
    sCodeguichet est une chaîne = "01001"
    sDevise est une chaîne = "XOF"
    sNumCompte est une chaîne = ""
    sLastLettre est une chaîne = ""
     
     
    //Variables Communes pour chaque type d'opération dans le rélévé
    //On fixe les codes Enregistrements de l'ancien solde, libéllé et du nouveau solde
    //Ancien Solde
     
    sCodeReg1 est une chaîne ="01"
    //Libellé
     
    sCodeReg2 est une chaîne ="04"
     
    //Nouveau Solde
    sCodeReg3 est une chaîne ="07"
    sNbreDecimale est une chaîne = "0"
     
    //Pour 04 et 05
     
    sCodeope est une chaîne = "  "
     
    //Variables pour le type 01 (Ancien Solde)
     
    sCodeEnregAncienSolde est une chaîne = "01"
     
     
    //Variables pour le type 04 (Mouvement)
     
    sCodeopeinterne est une chaîne = "    "
    sZonereserve4 est une chaîne = " "
    sCoderejet est une chaîne = "  "
    sZonereserve7 est une chaîne = "  "
    sNumEcriture est une chaîne = "       "
    sExo est une chaîne = " "
    sIndisponibilite est une chaîne = " "
    sZref est une chaîne = "                "
     
     
    //Variables pour le type 05 (Complement)
     
    sZonereserve5 est une chaîne = "     "
    sInfcomp est une chaîne = "   "
    sZonereserve6 est une chaîne = "  "
     
    //Récupération du numéro de compte sans le chiffre 2
    HLitRecherche(SOCIETE,IDSOCIETE,COMBO_Choisissez_une_société)
    SI HTrouve(SOCIETE) ALORS
     
     
    		// Sélection du nom et du chemin du fichier en fonction du client
    		// On récupère le nom du fichier en sortie et les autres informations Date (ancien/nouveau solde) montant (ancien/nouveau solde)
    		NomCheminFichier est une chaîne = "D:\AF120"
    		dDate est une Date = Droite(DateSys(),6)
     
    		NomCheminFichier = NomCheminFichier + "\" + SOCIETE.Nom_Fichier + "_" + dDate + ".TXT"
     
    		dDancienSolde = SOCIETE.DateAncienSolde
    		dDnouveauSolde = SOCIETE.DateNouveauSolde
    		sOldMontantSolde = Remplace(SansEspace(SOCIETE.MontantAncienSolde)," ","")
    		sNewMontantSolde = Remplace(SansEspace(SOCIETE.MontantNouveauSolde)," ","")
     
    // Ouverture du fichier
    IDFichier = fOuvre(NomCheminFichier, foCréation)
     
    // Affichage du message d'erreur si l'ouverture n'a pas été effectuée
    SI IDFichier = -1 ALORS
     
    	Erreur(ErreurInfo(errFichier))
     
    SINON
    		sNumCompte = SansEspace(AFB120.NCompte)
    		sNumCompte = Milieu(sNumCompte,1,6) + Milieu(sNumCompte,8,12)
     
    		//Signe de l'ancien solde 
    		sIgneS est une chaîne = Gauche(sOldMontantSolde,1)
     
    		//Si positif alors on prend son dernier chiffre
    		sLastChiffreP est une chaîne = Droite(sOldMontantSolde,1)
     
    		sOldMontantSolde = ChaîneSupprime(sOldMontantSolde,sIgneS)
    		sOldMontantSolde = Gauche(sOldMontantSolde, Taille(sOldMontantSolde)-1)
    		sIgneS=sIgneS+sLastChiffreP
     
    		HLitPremier(FormatAFB)
     
    		HLitRecherche(FormatAFB,FormatAFB.Chiffre,sIgneS)
     
    		SI HTrouve(FormatAFB) = Vrai ALORS
    				//info("Le record "+sIgnes+" a été trouvé !!")
    				sLastLettre = SansEspace(FormatAFB.Lettre)
    				//info(FormatAFB.Lettre)
    		FIN
     
     
    	//Ecriture de la 1ère 01 ligne du fichier avec l'ancien solde et la date
    	//On affecte la nouvelle lettre au montant
    	sOldMontantSolde = sOldMontantSolde+sLastLettre
    	sOldMontantSolde = "00000000000000"+ sOldMontantSolde
    	sOldMontantSolde = Droite(sOldMontantSolde,14)
     
     
    	HLitPremier(AFB120, IDAFB120)
    	//LI est un entier = HLitPremier(AFB120,IDAFB120)
     
    	SI Val(Gauche(dDancienSolde,2)) < 10 ALORS
     
    		Trace(Val(Gauche(dDancienSolde,2)))
    		dDancienSolde = "0"+dDancienSolde
     
    	FIN
     
    	ResEcrit = fEcritLigne(IDFichier,"01" + "ML043" + "    " + sCodeguichet + sDevise + sNbreDecimale + " " + sNumCompte + "  " +dDancienSolde + "                                                  " + sOldMontantSolde + "                ")
     
    		TANTQUE HEnDehors = Faux //ET ResEcrit = Vrai
     
    			// Écriture des enregistrements ligne par ligne dans le fichier texte
    			//Formatage des champs en format AFB210
    			DateValeur est une chaîne = AFB120.DateValeur
    			sLibelle est une chaîne = Gauche(AFB120.Libelle,36)
    			sCodeinterne est une chaîne = Milieu(AFB120.Libelle,39,4)
     
    			sMontantC est une chaîne = AFB120.MontantCredit
    			sMontantD est une chaîne = AFB120.MontantDebit
     
    			//sNumCompte =  AFB120.NCompte
    			//Récupération du montant Débit/Crédit de la transaction et caste pour faire 14 caractères
    			montant est une chaîne = ""
    			sDernierChiffre est une chaîne =""
    			sIgneM est une chaîne = ""
     
    			SI sMontantC = "" ALORS
    				montant = sMontantD
    				sIgneM = Gauche(montant,1)
    				montant = ChaîneSupprime(montant,sIgneM)
    				sDernierChiffre = Droite(montant,1)
    				sIgneM = sIgneM+sDernierChiffre
    			SINON
    				montant = sMontantC
    				sIgneM = Gauche(montant,1)
    				montant = ChaîneSupprime(montant,sIgneM)
    				sDernierChiffre = Droite(montant,1)
    				sIgneM = sIgneM+sDernierChiffre
    			FIN
     
     
     
    			HLitRecherche(FormatAFB,FormatAFB.Chiffre,sIgneM)
     
     
    				SI HTrouve() = Vrai ALORS
     
    					sLastLettre = FormatAFB.Lettre
     
    				FIN
     
    			//On enlève le dernier chiffre
     
    			montant = Gauche(montant,Taille(montant)-1)	
     
    			//Trace(sLastLettre)
    			//HLitSuivant(AFB120, IDAFB120)
     
    			montant = montant+sLastLettre
     
     
    			//On récupère le montant sur 14 Digits
    			montant =  "00000000000000" + montant		
    			montant = Droite(montant,14)
     
    			ResEcrit = fEcritLigne(IDFichier,"04" + "ML043" + sCodeinterne + sCodeguichet + sDevise + sNbreDecimale + " " + sNumCompte + "911" + DateValeur + "  " + sLibelle +"  " + "       " + " " + " " + montant + "                ")
    			HLitSuivant(AFB120, IDAFB120)
     
    		FIN
     
    		sIgneN est une chaîne = Milieu(sNewMontantSolde,1,1)
    		sLastChiffreN est une chaîne = Droite(sNewMontantSolde,1)
    		sNewMontantSolde = ChaîneSupprime(sNewMontantSolde,sIgneN)
    		//On les concatènes
    		sIgneN = SansEspace(sIgneN+sLastChiffreN)
     
    		//On enlève le signe et le dernier chiffre
    		sNewMontantSolde = ChaîneSupprime(sNewMontantSolde,sIgneN)
    		sNewMontantSolde = Gauche(sNewMontantSolde,Taille(sNewMontantSolde)-1)
     
    		//sNewMontantSolde = ChaîneSupprime(sNewMontantSolde,sLastChiffreN)
     
    		//Recherche du signe concaténé au dernier chiffre dans la table FormatAFB
    		HLitPremier(FormatAFB)
    		HLitRecherche(FormatAFB,FormatAFB.Chiffre, sIgneN,hIdentique)
     
    				SI HTrouve(FormatAFB) = Vrai ALORS
     
    					sLastLettre = FormatAFB.Lettre
     
    				FIN
     
    		//On affecte la nouvelle lettre au montant
    		sNewMontantSolde = sNewMontantSolde+sLastLettre
    		sNewMontantSolde = "00000000000000"+sNewMontantSolde
    		sNewMontantSolde = Droite(sNewMontantSolde,14)
     
     
    		SI Val(Gauche(dDnouveauSolde,2)) < 10 ALORS
    			dDnouveauSolde = "0"+dDnouveauSolde
    		FIN
    		//Ecriture de la dernière ligne du rélévé 07 le nouveau Solde
    		ResEcrit = fEcritLigne(IDFichier,"07" + "ML043" + "    " + sCodeguichet + sDevise + sNbreDecimale + " " + sNumCompte + "  " +dDnouveauSolde + "                                                  " + sNewMontantSolde + "                ")
     
    		// Affichage du message d'erreur si l'écriture n'a pas été effectuée
    		SI ResFermeFichier = -1 ALORS
    			// Affichage du message d'erreur si la fermeture n'a pas été effectuée
    			Erreur(ErreurInfo(errMessage))
    		FIN
    FIN
    FIN
     
    //RAZ(vrai)
     
    Info("Exportation terminée avec succès !!!!")
    Merci de votre coup de main.

    Cordialement,
    _shuriken_
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonsoir
    Puisque tu vas faire :

    Avant de remplir les champs utilises :





  3. #3
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    +1 Yusep

    Détail+ : utilise plutôt fchargefichier et pour toute ligne. Le temps de lecture est beaucoup plus rapide.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  4. #4
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Bonjour à tous,

    Toujours le même problème. J'ai même crée un nouveau projet; J'ai l'impression que mon HRAZ(AFB120) est mal positionné.

    _shuriken_
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  5. #5
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Ton hraz(AFB210), il faut le mettre après ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI Milieu(sPos2,19,1) = "*" ALORS
    			SORTIR
    		FIN
    Ligne 40 donc.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  6. #6
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Ton hraz(AFB210), il faut le mettre après ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI Milieu(sPos2,19,1) = "*" ALORS
    			SORTIR
    		FIN
    Ligne 40 donc.
    Pareil
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  7. #7
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je n'ai pas le temps de regarder en profondeur ton code mais j'ai un truc qui me chagrine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Affichage du message d'erreur si l'ouverture n'a pas été effectuée
    SI IDFichier = -1 ALORS
     
    	Erreur(ErreurInfo(errFichier))
     
    SINON
    		sNumCompte = SansEspace(AFB120.NCompte)
    		sNumCompte = Milieu(sNumCompte,1,6) + Milieu(sNumCompte,8,12)
    Comment sais-tu que tu es bien positionné dans AFB120 ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  8. #8
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Là tu es au code de génération.

    Je n'arrivais pas à intégrer le fichier avec HRAZ(); mais après l'avoir mis à la ligne 133, ça marche mais avec quelques imperfections (cf Capture)

    Nom : AFB120fic.png
Affichages : 4824
Taille : 102,1 Ko
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  9. #9
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je vois 2 flitligne dans ta boucle est-ce normal ?
    De plus, il n'y a pas de hcreation(AFB120)...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  10. #10
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Je vois 2 flitligne dans ta boucle est-ce normal ?
    De plus, il n'y a pas de hcreation(AFB120)...
    J'ai enlevé le 2ème flitligne .

    Par contre, le Hcreation me renvoyait une erreur dans le debug, j'ai préféré l’enlever, j'ai mis HcreationSiInexistant(AFB120) à la place.

    T'as une idée du pourquoi il me récupère mes lignes de cette manière sur la capture?
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  11. #11
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,

    Une première chose serait de nous exposer clairement ce qui ne va pas, parce que
    Mon code me génère des informations qui ne sont même pas contenu dans la base, et je n'arrive pas à comprendre pourquoi.
    ne nous permet pas de savoir où et que chercher comme dysfonctionnement.

    Par ailleurs, et votre dernier message me conforte dans cette opinion, j'ai l'impression que votre import n'est pas nécessairement au pont.
    J'aimerais la version actuelle de votre code et le fichier AFB120 correspondant à l'extrait que vous avez joint à votre message initial.
    Et, en principe, ce doit être l'unique contenu de ce fichier puisque vous videz le fichier (ligne 27).

    Quelques remarques sur votre code d'import joint à votre message initial :

    - ligne 31 : Tester TANTQUE nIDFichier<>-1 est une erreur s'il s'agit de s'assurer que la lecture de la ligne a réussi.
    Vous confondez avec la réussite de l’ouverture du fichier.
    L'échec de la lecture d'une ligne se solderait par sLigne = ""

    frenchsting vous a suggéré d'utiliser fchargefichier et POUR TOUTE LIGNE.
    Il a parfaitement raison, sauf que je crois qu'il évoquait fChargeTexte. A ma connaissance, fchargefichier n'existe pas.

    - ligne 34 : sPos2 est une chaîne
    La déclaration doit remonter dans le bloc des déclarations. Inutile de la répéter à chaque itération.
    La ligne deviendrait donc : sPos2 = sLigne[[1 sur 93]]
    Cette ligne n'existera plus si vous adoptez la suggestion du parcours de chaine POUR TOUT, mais vous pouvez reprendre la variable dans votre déclaration du parcours.
    POUR TOUT sPos2 DE ...

    - lignes 44-45 et 45-47 : une ligne suffit à chaque fois pour assigner la chaîne extraite à la rubrique de AFB120


    - ligne 96 : Lib est une chaîne...
    Même remarque que pour la ligne 34

    - ligne 113 : HAjoute(AFB120)
    Cette ligne devrait venir après le traitement du "NOUVEAU SOLDE AU :" (ligne 115), qui autrement n'est jamais intégré au fichier AFB120.

    Par ailleurs, je structurerais plus clairement les divers traitements en recourant à la structure de code SELON ... CAS ... AUTRE CAS ... FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELON VRAI
    CAS Milieu(sPos2,2,6) = "Compte" //Ligne 41
    CAS Milieu(sPos2,5,20) = "SOLDE PRECEDENT AU :" //Ligne 50
    CAS EstNumérique(Milieu(sPos2,54,6)) > 0 //Ligne 77
    CAS Milieu(sPos2,8,18) = "NOUVEAU SOLDE AU :" //Ligne 115
    Et enfin, une remarque préliminaire pour votre export :

    Toutes les variables que vous initialisez avec des espaces devraient être affectées avec la fonction Répète().
    Cela vous permettrait de contrôler sans aucune ambiguïté que vous respectez bien les spécifications de la "Structure de ficher AZFB120".
    Par exemple, ligne 40 : au lieu de sCodeopeinterne est une chaîne = " "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sCodeopeinterne est une chaîne = Répète(" ",4)
    Voilà, j'espère que ces commentaires vous seront utiles.


    Bon travail,
    Hemgé

  12. #12
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Bonjour Hemgé,

    Effectivement je me suis mal exprimer.

    Citation Envoyé par Hemgé Voir le message

    Une première chose serait de nous exposer clairement ce qui ne va pas, parce que

    ne nous permet pas de savoir où et que chercher comme dysfonctionnement.
    J'ai à la fois des soucis avec l'import comme l'Export. Donc je préfère qu'on analyse ensemble mon code d'import.

    Citation Envoyé par Hemgé Voir le message

    J'aimerais la version actuelle de votre code et le fichier AFB120 correspondant à l'extrait que vous avez joint à votre message initial.
    Et, en principe, ce doit être l'unique contenu de ce fichier puisque vous videz le fichier (ligne 27).
    Voici le code actualisé avec la structure du fichier AFB120 Nom : AFB120.png
Affichages : 4592
Taille : 31,0 Ko :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
     
    sFichier est une chaîne
    //On récupère le fichier sur le disque
    sFichier = fSélecteur("C:\","Sélectionner un fichier","Fichier Texte (*.TXT)" + TAB + "*.txt" + RC + "Tous" + TAB + "*.*", "txt")
     
    nIDFichier est un entier
    sMdebit est une chaîne
    sMcredit est une chaîne
    Mtcredit est une chaîne
    sdAteVal est une chaîne
    sDebit est une chaîne
    sCredit est une chaîne
    Mtdebit est une chaîne
    sNcompte est une chaîne
    sDevise est une chaîne
    sPos2 est une chaîne
    sOldSoldeDate est une chaîne
    sNewSoldeDate est une chaîne
    sLigne est une chaîne= ""
     
    //On ouvre le fichier en Lecture/Ecriture
    nIDFichier = fOuvre(sFichier, foLectureEcriture)
    //fChargeTexte(sFichier)
     
    SI nIDFichier = -1 ALORS
    	Erreur(ErreurInfo(errMessage))
    SINON
     
    	//On vide la table
    	HSupprimeTout(AFB120)
     
    	sLigne = fLitLigne(nIDFichier)
     
    	TANTQUE nIDFichier<>-1 
     
    		sLigne = fLitLigne(nIDFichier)
    		sPos2 = sLigne[[1 sur 93]]
     
    		//Si Fin de fichier on sors
     
    		SI Milieu(sPos2,19,1) = "*" ALORS
    			SORTIR
    		FIN
     
     
     
    		SI Milieu(sPos2,2,6) = "Compte" ALORS
     
    			//On récupère le compte et la dévise
    			sNcompte = Milieu(sPos2,14,12)
    			sDevise = Milieu(sPos2,35,3)
     
    		FIN
    			AFB120.NCompte=sNcompte
    			AFB120.Devise=sDevise
     
    		SI Milieu(sPos2,5,20) = "SOLDE PRECEDENT AU :" ALORS
     
    			sOldSoldeDate = Milieu(sPos2,26,8)
    			SOCIETE.DateAncienSolde = sOldSoldeDate
     
    			//Recupération du montant au débit de l'ancien solde
     
    			sDebit = Remplace(SansEspace(Milieu(sPos2,61,16))," ","")
     
    			SI sDebit <> "" ALORS
    				sDebit = "-"+sDebit
    				SOCIETE.MontantAncienSolde = sDebit
    			FIN
     
    			//Recupération du montant au crédit de l'ancien solde
     
    			sCredit = Remplace(SansEspace(Milieu(sPos2,78,16))," ","")
     
    			SI sCredit <> "" ALORS
    				sCredit = "+"+sCredit
    				SOCIETE.MontantAncienSolde = sCredit
     
    			FIN
     
    		FIN
     
    		//Test si DateVal est présent
     
    		SI EstNumérique(Milieu(sPos2,54,6)) > 0 ALORS
     
    			//Trace(Milieu(sPos2,54,6))
    			//Récupère la date val
    			sdAteVal = Remplace(Milieu(sPos2,54,6)," ","")
     
    			SI sdAteVal="" ALORS
    				AFB120.DateValeur=""
    			SINON
     
    				SI Taille(sdAteVal) = 6 ALORS
    					AFB120.DateValeur = sdAteVal
    				FIN
     
    			FIN
     
     
    			SI 	sdAteVal <> "" 
    				//Récupère le libéllé
    				Lib est une chaîne = Milieu(sPos2,3,56)
     
    				AFB120.Libelle = Lib
     
    				//Montant Débit/Crédit du mouvement
     
    				Mtdebit = SansEspace(Milieu(sPos2,61,16))
    				Mtcredit = SansEspace(Milieu(sPos2,78,16))
     
    				SI Mtdebit = "" ALORS
    					AFB120.MontantDebit = ""
    					AFB120.MontantCredit = "+" + Mtcredit
    				SINON
    					AFB120.MontantDebit = "-" + Mtdebit
    					AFB120.MontantCredit = ""
    				FIN
     
     
     
     
    				SI Milieu(sPos2,8,18) = "NOUVEAU SOLDE AU :" ALORS
     
    					//On récupère la date
    					sNewSoldeDate = Milieu(sPos2,27,8)
     
    					//On récupère le montant du solde soit en débit soit en crédit
     
    					sMdebit = "-" + SansEspace(Milieu(sPos2,61,16))
    					sMcredit = "+" + SansEspace(Milieu(sPos2,78,16))
     
    				FIN
    				FIN		
    			//Ligne suivante
    			//sLigne = fLitLigne(nIDFichier)
    		FIN
    		HAjoute(AFB120)
    		//**
     
    		//Ecriture dans les tables
    		SI COMBO_SOCIETE = "" ALORS
    			Info("Merci de choisir une société !!!")
    		FIN
     
    		HLitRecherchePremier(SOCIETE,SOCIETE.Nom_SOCIETE,COMBO_SOCIETE)
     
    		SI HTrouve(SOCIETE) ALORS
     
    			SOCIETE.DateAncienSolde = Remplace(sOldSoldeDate,".","")
     
    			SI sMdebit = "" ALORS
     
    				SOCIETE.MontantAncienSolde = sCredit
     
    			SINON
     
    				SOCIETE.MontantAncienSolde = sDebit
    			FIN
     
    			//FIN
     
    			SOCIETE.DateNouveauSolde = Remplace(sNewSoldeDate,".","")
     
    			SI sMdebit = "" ALORS
    				SOCIETE.MontantNouveauSolde = sMcredit
     
    			SINON
    				SOCIETE.MontantNouveauSolde = sMdebit
     
    			FIN
     
    		FIN
     
    		HModifie(SOCIETE)
     
     
    	FIN	// **		
    FIN
     
     
    Info("Importation terminée avec succès !!!!")

    Citation Envoyé par Hemgé Voir le message
    - ligne 31 : Tester TANTQUE nIDFichier<>-1 est une erreur s'il s'agit de s'assurer que la lecture de la ligne a réussi.
    Vous confondez avec la réussite de l’ouverture du fichier.
    L'échec de la lecture d'une ligne se solderait par sLigne = ""

    frenchsting vous a suggéré d'utiliser fchargefichier et POUR TOUTE LIGNE.
    Il a parfaitement raison, sauf que je crois qu'il évoquait fChargeTexte. A ma connaissance, fchargefichier n'existe pas.

    - ligne 34 : sPos2 est une chaîne
    La déclaration doit remonter dans le bloc des déclarations. Inutile de la répéter à chaque itération.
    La ligne deviendrait donc : sPos2 = sLigne[[1 sur 93]]
    Cette ligne n'existera plus si vous adoptez la suggestion du parcours de chaine POUR TOUT, mais vous pouvez reprendre la variable dans votre déclaration du parcours.
    POUR TOUT sPos2 DE ...

    - lignes 44-45 et 45-47 : une ligne suffit à chaque fois pour assigner la chaîne extraite à la rubrique de AFB120


    - ligne 96 : Lib est une chaîne...
    Même remarque que pour la ligne 34

    - ligne 113 : HAjoute(AFB120)
    Cette ligne devrait venir après le traitement du "NOUVEAU SOLDE AU :" (ligne 115), qui autrement n'est jamais intégré au fichier AFB120.

    Par ailleurs, je structurerais plus clairement les divers traitements en recourant à la structure de code SELON ... CAS ... AUTRE CAS ... FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELON VRAI
    CAS Milieu(sPos2,2,6) = "Compte" //Ligne 41
    CAS Milieu(sPos2,5,20) = "SOLDE PRECEDENT AU :" //Ligne 50
    CAS EstNumérique(Milieu(sPos2,54,6)) > 0 //Ligne 77
    CAS Milieu(sPos2,8,18) = "NOUVEAU SOLDE AU :" //Ligne 115
    Et enfin, une remarque préliminaire pour votre export :

    Toutes les variables que vous initialisez avec des espaces devraient être affectées avec la fonction Répète().
    Cela vous permettrait de contrôler sans aucune ambiguïté que vous respectez bien les spécifications de la "Structure de ficher AZFB120".
    Par exemple, ligne 40 : au lieu de sCodeopeinterne est une chaîne = " "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sCodeopeinterne est une chaîne = Répète(" ",4)
    Voilà, j'espère que ces commentaires vous seront utiles.


    Bon travail,
    Hemgé
    D'accord
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  13. #13
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    +1 Yusep

    Détail+ : utilise plutôt fchargefichier et pour toute ligne. Le temps de lecture est beaucoup plus rapide.
    J'ai un peu du mal avec fChargeTexte et POUR TOUTE LIGNE, puis que je recupère mon fichier à partir d'un fSelecteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sfichier est une chaine
     
    sFichier = fSélecteur("C:\","Sélectionner un fichier","Fichier Texte (*.TXT)" + TAB + "*.txt" + RC + "Tous" + TAB + "*.*", "txt")
     
    sPos2 = fChargeTexte(sFichier)
    Comment je parcours avec l'instruction POUR ?

    Bien entendu, j'ai déjà Googler !
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  14. #14
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Ici, tu postes un code qui fait 180 lignes,et tu nous demandes de trouver où se trouve le bug dans ton code.

    Entre autre, tu as une partie de ton code qui modifie un fichier sociéte ... et a priori, cette partie là n'est pas en cause.
    Ce qui serait utile (pour toi), c'est de chercher à isoler la partie du code qui plante. Par exemple en mettant en commentaire toutes les parties qui sont secondaires.
    On arriverait alors à un code d'une dizaine de lignes.
    Et à partir de ce code de 10 lignes, en principe tu n'aurais AUCUNE difficulté à trouver le bug... Et en cas de difficulté, tu obtiendrais une réponse en moins d'1 heure sur ce forum.

    Mais sur un code de 180 lignes... ça peut durer un certain temps. Parce que ce n'est pas aux autres de faire l'effort de comprendre ton code, c'est à toi.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  15. #15
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    ReBonsoir,

    le fichier AFB120 correspondant à l'extrait que vous avez joint à votre message initial.
    J'entendais par là le fichier que votre code produit, ce qui sera in fine le meilleur trace()

    Parce que j'ai comme des doutes quand vous écrivez
    Les traces et infos m'indiquent clairement que tout est correct
    Par ailleurs, votre code est volumineux et sa présentation (donc sa lecture) laisse à désirer.

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonsoir
    Voir l'aide :

    http://doc.pcsoft.fr/fr-FR/?1510018&...R_TOUS_Chaines

    où vous pouvez lire l'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Récupère la liste des librairies chargées en mémoire
    ListeLibrairie est une chaîne = ListeDLL()
    
    // Pour chaque librairie
    POUR TOUTE CHAÎNE UneLibrairie DE ListeLibrairie SEPAREE PAR RC
            // Ajoute la librairie dans la table TABLE_Librairie
            TableAjouteLigne(TABLE_Librairie, ExtraitChaîne(UneLibrairie, 1, TAB))
    FIN
    
    Adaptez le à votre cas.

  17. #17
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Citation Envoyé par _shuriken_ Voir le message
    J'ai un peu du mal avec fChargeTexte et POUR TOUTE LIGNE, puis que je recupère mon fichier à partir d'un fSelecteur.
    Où se situe le problème ? Une fois de plus, votre message est imprécis et ne permet pas de comprendre votre difficulté (sauf que vous ne lisez pas attentivement la documentation).
    fSélecteur n'ouvre pas un fichier, mais vous restitie le nom et le chemin d'un fichier pour vous permettre de le manipuler selon vos besoins.

    <Résultat> de fSélecteur : Chaîne de caractères

    •Nom complet du ou des fichiers sélectionnés. Si plusieurs fichiers sont sélectionnés, les noms des fichiers sont séparés par des retour chariot (RC).
    •Nom complet du fichier à créer.
    •Chaîne vide ("") si aucun fichier n'a été sélectionné ou n'est à créer.

    Citation Envoyé par _shuriken_ Voir le message
    Comment je parcours avec l'instruction POUR ?
    Vous est-il venu à l'esprit d'utiliser l'aide, la doc, comme vous le suggère Yusep ?
    Si vous y renseignez POUR, l'index de la doc vous donne quatre entrées principales : POUR, POUR CHAQUE, POUR TOUS et POUR TOUT.
    Viennent ensuite les sous-entrées, qui vous permettent de comprendre rapidement ce qui vous concerne et, dans le cas contraire, un peu de lecture vous le permettrait.

    Citation Envoyé par _shuriken_ Voir le message
    Bien entendu, j'ai déjà Googler !
    Google :
    • avec "windev pour", l'autocomplétion propose : "Windev pour les nulls", "Windev pour tout", "Windev pour mac", "Windev pour mac os"
      Où est le piège ?
    • avec "Windev pour tout", les 4 premières entrées renvoient à la doc de PCsoft dont en 4e position celle que Yusep vous a renseignée.
      Les entrées suivantes vous renvoient notamment au forum de PCsoft ou à celui sur lequel nous nous trouvons.
      Alors, que vous fallait-il en plus ?


    Allons, secouez-vous un peu.
    Reprenez tout depuis le début, en lisant attentivement la doc et testez les exemples.
    Lisez aussi les forums, qui vous ewposent des cas concrets d'utilisation de ces instructions.

    Nous pourrions, mais ne voulons pas, faire votre boulot à votre place.

    Bon week-end

    Hemgé

  18. #18
    Membre confirmé Avatar de _shuriken_
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2006
    Messages : 543
    Points : 454
    Points
    454
    Par défaut
    Bonsoir tout le monde,

    Je vous présentes mes plus plates excuses si à un moment donné vous avez cru que je suis en train de vous déléguer mon travail.

    Je suis inge. Systèmes de formation, et ceux-ci ne relèvent nullement de mon "Job description"; mais j'ai voulu en plus de ce que je fais d'habitude me mettre dans la programmation sous Windev qui me semble être l'outil le plus rapide de développer pour un néophyte comme moi.

    Oui, j'ai acheté des livres, oui je visite les forums, oui je parcours l'aide. Etant la plupart du temps les yeux dans les logs, j'ai eu ce réflexe de vous faire voir mon code (qui je l'admet est très mal structuré, et pas commenté du tout). En faisant cela je pensais à une chose; que l'un d'entre vous aurait pu copier/coller et exécuter le code pour y déceler les erreurs que je n'ai pas pu voir. Mon intention n'était nullement de vous faire bosser à ma place.

    Je supervise actuellement une restauration système qui me prendra une grosse moitié de la nuit, et dès que j'aurai le temps; j'appliquerai les précieux conseils de Hemgé, et je vous ferai part de l'avancé et/ou des préoccupations qui me bloquent.

    Merci à tous,
    _shuriken_
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  19. #19
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    vous êtes un peu "dur" avec _shuriken_ qui a dit :

    J'ai un peu du mal avec fChargeTexte et POUR TOUTE LIGNE, puis que je recupère mon fichier à partir d'un fSelecteur.
    car vous l'avez induit en erreur (à moins que j'ai raté une nouvelle syntaxe des dernières versions de windev) , le pour toute ligne existe bien mais c'est pour des tables.

    Parcours des éléments du champ (Table, Liste et Zone répétée) Masquer les détails
    POUR TOUTE LIGNE [<Indice> [, <Compteur>]] DE <Champ>
    ...
    FIN
    pour parcourir les lignes d'un fichier texte chargé dans une chaine , il faut faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ContenuFic est une chaîne
     
    ContenuFic = fChargeTexte(sFichier)
     
    // sligne est la ligne lue
    POUR TOUTE  CHAINE sLigne  DE ContenuFic SEPAREE PAR RC
    // code de traitement de la ligne
    FIN
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  20. #20
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par _shuriken_ Voir le message
    J'ai enlevé le 2ème flitligne .

    Par contre, le Hcreation me renvoyait une erreur dans le debug, j'ai préféré l’enlever, j'ai mis HcreationSiInexistant(AFB120) à la place.

    T'as une idée du pourquoi il me récupère mes lignes de cette manière sur la capture?
    Et bien peut-être tout simplement parce que tu ne vides pas ton fichier d'import avant de faire ton traitement.

    Hcreationsiinexistant(), va te créer un fichier vide qui a la structure de l'analyse, uniquement s'il n'existe pas physiquement.
    Hcreation(), va te créer un fichier vide qui a la structure de l'analyse. Si celui-ci existe, il est vidé de son contenu.

    Pour tester, utilise des points d'arrêt et la touche F7 pour le pas à pas.

    Désolé de t'avoir induit en erreur, je parlais bien de la syntaxe fchargetexte(), pour toute chaine xxx de yyy separee par RC.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

Discussions similaires

  1. Effacer une ligne d'un fichier texte formaté
    Par TLImpala dans le forum VBA Access
    Réponses: 5
    Dernier message: 14/04/2008, 15h51
  2. écrire fichier texte format special
    Par garenne dans le forum MATLAB
    Réponses: 5
    Dernier message: 14/04/2008, 15h28
  3. Lecture fichier texte format personnel
    Par thomtom dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/04/2008, 13h18
  4. Génération fichier texte FORMS6
    Par amarkamel dans le forum Forms
    Réponses: 0
    Dernier message: 01/08/2007, 10h09
  5. Problème Génération fichier texte
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 18/05/2006, 11h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo