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 :

extraire une partie d'un fichier txt dans un fichier hfsql [WD19]


Sujet :

WinDev

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut extraire une partie d'un fichier txt dans un fichier hfsql
    Bonjour a tous
    Voici mon problème.

    J'ai un fichier texte composé comme suit (Code+Qté)
    00000001 1
    2222222222546 1
    2222222222895 1
    00000002 1
    2222222879555 1
    2222222221254 1
    00000003 1
    2222222222666 1
    2211111111111 1
    J'essaie mais en vain de lire ce fichier et qu'à chaque fois que je rencontre un code sur 8 caractères (ex :00000001) il me remplisse mon fichier HFSQL (inventaire)
    composé de
    Lot ( égal au code sur 8 caractères)
    Codebarre(égal au code sur 13 caractères)
    Qté(égal a 1)
    Après avoir ouvert mon fichier je fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    LigneLue = fLitLigne(IDFichier)
    TANTQUE LigneLue <> EOT ET LigneLue <> ""
    	sValeur est une chaîne
           SI Taille (sValeur)<=8 ALORS
    		sValeur=(ExtraitChaîne(LigneLue,1,TAB))
    inventaire.lot=svaleur
    hajoute(inventaire)
    sinon
    inventaire.Codebarre=ExtraitChaîne(LigneLue,1,TAB)
    			inventaire.Qte=ExtraitChaîne(LigneLue,2,TAB)
    			HAjoute(inventaire)
    LigneLue = fLitLigne(IDFichier)
    fin
    	fFerme(IDFichier)
    Mon but serai d'avoir ce résultat
    lot 00000001 codebarre 2222222222546 qté 1
    lot 00000001 codebarre 2222222222895 qté 1
    lot 00000002 codebarre 2222222879555 qté 1
    lot 00000002 codebarre 2222222221254 qté 1
    lot 00000003 codebarre 2222222222666 qté 1
    lot 00000003 codebarre 2211111111111 qté 1

    Je vous remercie de votre aide

  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
    Bonjour
    Dans le SINON, il vaudrait mieux Hmodifie.
    Ou mieux :
    Mettre Hajoute chaque 3 RC

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    tu nous fais un drôle de truc dans ton code : tu testes une valeur avant de l'avoir affectée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TANTQUE LigneLue <> EOT ET LigneLue <> ""
    sValeur est une chaîne
    SI Taille (sValeur)<=8 ALORS
    sValeur=(ExtraitChaîne(LigneLue,1,TAB))
    Il faut faire comme ceci par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sValeur est une chaîne
    TANTQUE LigneLue <> EOT ET LigneLue <> ""
    sValeur=(ExtraitChaîne(LigneLue,1,TAB))
    SI Taille (sValeur)<=8 ALORS
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut
    Desolé c est une erreur en recopiant le message.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut
    J arrive à lire le fichier mais dans ma colonne lot il me met tous les codebarres or je voulais que les codebarres qui ont 8 caractères il ne semble pas prendre en compte ma condition. Si taille de svaleur est inf ou égale à 8.
    Je ne vois pas comment faire.
    J ai besoin de votre aide les amis

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    il y a une autre erreur dans le code que tu nous montres (si ce n'est pas celui que tu utilises, on ne pourra rien faire pour toi, on n'est pas des devins ).
    Il faut que tu lises une ligne tout le temps en fin de boucle et pas seulement dans le sinon. D'autre part es-tu sûr qu'il y a des TAB comme séparateur dans ton fichier texte et pas des espaces ?
    Un code qui pourrait fonctionner (sans le traitement de base de données où dans le code que tu montres il y a aussi des erreurs (voir le message de Yusep ) ) :
    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
    LigneLue est une chaîne
    sValeur est une chaîne
    IDFichier est un entier système
    // Ouverture d'un fichier externe
    IDFichier = fOuvre("f:\temp\test_codebarre.txt", foLectureEcriture)
    SI IDFichier <> -1 ALORS 	
    LigneLue = fLitLigne(IDFichier)
    TANTQUE LigneLue <> EOT ET LigneLue <> ""
    	sValeur=(ExtraitChaîne(LigneLue,1,TAB))
    	SI Taille (sValeur)<=8 ALORS
    		Trace("inventaire.lot  : ",sValeur)
    	SINON
    		Trace("inventaire.Codebarre : ",ExtraitChaîne(LigneLue,1,TAB))
    		Trace("inventaire.Qte : ",ExtraitChaîne(LigneLue,2,TAB))
    	FIN
    LigneLue = fLitLigne(IDFichier)
    FIN
    fFerme(IDFichier)
    FIN
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut
    Merci ami calmant
    J essayerai demain et je vous tiens au courant et merci encore.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut
    Bonjour Ami calmant

    J'ai testé ton code , voila le resultat.
    inventaire.Codebarre : 00012547
    inventaire.Qte : 1
    inventaire.Codebarre : 3258170602007
    inventaire.Qte : 8
    inventaire.Codebarre : 3258170602008
    inventaire.Qte : 3
    inventaire.Codebarre : 00000247
    inventaire.Qte : 1
    inventaire.Codebarre : 3258170602001
    inventaire.Qte : 1
    inventaire.Codebarre : 3258170602002
    inventaire.Qte : 5
    inventaire.Codebarre : 3258170602003
    inventaire.Qte : 3
    inventaire.Codebarre : 3258170602004
    inventaire.Qte : 1
    inventaire.Codebarre : 3258170602005

    Je n'ai pas les lots sur 8 caractères.
    J'ai refait un test en remplacant
    SI Taille (sValeur)<=8 par
    Si ChaîneCommencePar(sValeur,0)
    et la il m'affiche bien "inventaire.lot"
    inventaire.lot : 00012547
    inventaire.Codebarre : 3258170602007
    inventaire.Qte : 8
    inventaire.Codebarre : 3258170602008
    inventaire.Qte : 3
    inventaire.lot : 00000247
    inventaire.Codebarre : 3258170602001
    inventaire.Qte : 1
    inventaire.Codebarre : 3258170602002
    inventaire.Qte : 5
    inventaire.Codebarre : 3258170602003
    inventaire.Qte : 3
    inventaire.Codebarre : 3258170602004
    inventaire.Qte : 1
    inventaire.Codebarre : 3258170602005
    inventaire.Qte : 3
    Je ne vois pas ou est l'erreur sur SI Taille (sValeur)<=8

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    moi j'obtiens bien cela avec mon code :
    inventaire.lot : 00000001
    inventaire.Codebarre : 2222222222546
    inventaire.Qte : 1
    inventaire.Codebarre : 2222222222895
    inventaire.Qte : 1
    inventaire.lot : 00000002
    inventaire.Codebarre : 2222222879555
    inventaire.Qte : 1
    inventaire.Codebarre : 2222222221254
    inventaire.Qte : 1
    inventaire.lot : 00000003
    inventaire.Codebarre : 2222222222666
    inventaire.Qte : 1
    inventaire.Codebarre : 2211111111111
    inventaire.Qte : 1
    tu ne fais pas attention à ce que je dis :
    D'autre part es-tu sûr qu'il y a des TAB comme séparateur dans ton fichier texte et pas des espaces ?
    AMi calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut
    Bonjour

    L'erreur vient de mon fichier texte, je l'ai ouvert avec notepad++ et il y a plusieurs tabulation après le champs code barre.
    ce fichier est généré par mon lecteur code barre. je ne vois pas comment supprimer ces tabulations dans mon fichier.
    a moins de le faire avant le traitement. Auriez vous une idée.
    Mon code
    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
    // Déclaration des variables
    TableSupprimeTout(TABLE_Inv)
    HSupprimeTout(INVTOTAL)
    NomCheminFichier est une chaîne
    IDFichier est un entier
    LigneLue est une chaîne
    sValeur est une chaîne
     
    // Lit la valeur 'CHEMIN'
    NomCheminFichier = INILit("FICHIER_IMPORT", "CHEMIN", "", "C:\Application\INVENTAIRE\inventaire.ini")
     
    SI ErreurDétectée ALORS
    	Erreur()
    FIN
     
    // Ouverture du fichier
    IDFichier = fOuvre(NomCheminFichier,foLectureEcriture)
    // Affichage du message d'erreur si l'ouverture n'a pas été effectuée
     
    SI IDFichier <> -1 ALORS 
    	LigneLue = fLitLigne(IDFichier)
    	TANTQUE LigneLue <> EOT ET LigneLue <> ""
    		sValeur=ExtraitChaîne(LigneLue,1,TAB)//,DepuisDébut)
     
    		SI Taille(sValeur)<=8 ALORS
     
     
    			Trace("inventaire.lot  : ",sValeur)
    			INVTOTAL.Lot=sValeur
     
     
    		SINON
     
    			INVTOTAL.Codebarre=(ExtraitChaîne(LigneLue,1,TAB))
    			INVTOTAL.Qte=(ExtraitChaîne(LigneLue,2,TAB))
    			HAjoute(INVTOTAL)
    			Trace("inventaire.Codebarre : ",ExtraitChaîne(LigneLue,1,TAB))
    			Trace("inventaire.Qte : ",ExtraitChaîne(LigneLue,2,TAB))
    		FIN
    		LigneLue = fLitLigne(IDFichier)
    	FIN
    	TableAffiche(TABLE_Inv,taDébut)
     
    	fFerme(IDFichier)
    FIN

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    tu devrais t'en sortir en utilisant les expressions régulières avec un truc du style :
    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
    LigneLue est une chaîne
    param1,param2 sont des chaînes
    IDFichier est un entier système
    // Ouverture d'un fichier externe
    IDFichier = fOuvre("f:\temp\test_codebarre.txt", foLectureEcriture)
    SI IDFichier <> -1 ALORS 	
    	LigneLue = fLitLigne(IDFichier)
    	TANTQUE LigneLue <> EOT ET LigneLue <> ""
    		// on teste si on est sur une ligne lot ( code sur 8 Chiffres) suivi de TAB ou espace (au moins 1 fois ) )
    		SI VérifieExpressionRégulière(LigneLue,"([0-9]{8,8})[" + TAB + " ]+([0-9]+)",param1,param2) ALORS
    		Trace("inventaire.lot  : ",param1)	
    		Trace("nombre :",param2)
    		FIN
    		// on teste si on est sur une ligne codebarre ( code sur 13 Chiffres) suivi de TAB ou espace (au moins 1 fois ) )	
    		SI VérifieExpressionRégulière(LigneLue,"([0-9]{13,13})[" + TAB + " ]+([0-9]+)",param1,param2) ALORS
    			Trace("inventaire.Codebarre  : ",param1)	
    			Trace("inventaire.Qte :",param2)	
    		FIN
    		LigneLue = fLitLigne(IDFichier)
    	FIN
    	fFerme(IDFichier)
    FIN
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut
    bonjour Ami calmant
    J'ai essayé avec la commande sansespace de WinDev et je retire les espaces de svaleur après le 8ième caractère et puis après je fait mon test sur 8 caractères et cela fonctionne.
    merci de votre aide

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Points : 4
    Points
    4
    Par défaut
    Ce n était pas des tabulations mais des espaces.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 19
    Dernier message: 25/09/2015, 14h12
  2. import fichier XML dans un fichier TXT ou XLS
    Par logiclogic dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 11/01/2013, 11h19
  3. Problème d'affichage dans un fichier suite à un dir>fichier.txt
    Par paix02200 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 20/08/2007, 12h53
  4. copie le contenu d'un fichier xls dans un fichier txt
    Par mariafan dans le forum Langage
    Réponses: 22
    Dernier message: 09/08/2007, 14h07
  5. detecter une ligne a un seul mot dans un fichier txt
    Par malikoo dans le forum Général Python
    Réponses: 9
    Dernier message: 04/07/2007, 19h43

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