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 :

CHAINE MULTILIGNE : remplir une table [WD18]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 71
    Par défaut CHAINE MULTILIGNE : remplir une table
    Bonjour

    Je retourne vers vous après une journrnée de tentative afin d'extraire la chaine suivante pour remplir une table.
    Voici la chaine à traiter contenue dans fichier texte
    REF+100100
    Date+110717
    QTE+10
    REF+200200
    Date+110717
    QTE+20
    Resultat souhaite :

    100100 110717 10
    200200 110717 20
    J arrive uniquement avoir les REF mais pas les dates ni les qtés , voici 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
     
    / ouvre le fichier à lire
    Handelfichier = fOuvre("D:\Texte.txt",foLecture) //ouverture fichier à lire passé en paramètre
    SI Handelfichier=-1 ALORS // traitement erreur
    Info(ErreurInfo())
    SINON
    // Début lecture du fichier texte
    LigneLue = fLitLigne(Handelfichier)
    TANTQUE LigneLue<>EOT // tant qu'on n'a pas atteint la fin du fichier
    Schaine = ExtraitChaîne(LigneLue,1,"+",DepuisDébut)
    SI Schaine = "REF" ALORS
    REF = ExtraitChaîne(LigneLue,2,"+",DepuisDébut)	
    Tableajouteligne(Table_test,REF)
    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 458
    Par défaut
    Bonjour,
    Il suffit de remplacer ton SI dans la boucle par un SELON, de noter le numéro de la ligne ajoutée dans le cas d'une REF, et d'affecter les bonnes colonnes dans les autres cas.

    Tatayo.

  3. #3
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 983
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Je traduis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    nCompteur++
    SELON Majuscule(sChaine) //On n'est pas à l'abri d'une faute de frappe dans le fichier txt
         CAS "REF":
              sRef=ExtraitChaîne(LigneLue,2,"+",DepuisDébut)
         CAS "DATE":
             sDate=ExtraitChaîne(LigneLue,2,"+",DepuisDébut)
         CAS "QTE":
            sQte=ExtraitChaîne(LigneLue,2,"+",DepuisDébut)
    FIN
    Si nCompteur=3 ALORS
         Tableajouteligne(Table_test,sRef,sDate,sQte)
         nCompteur=0
    FIN

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 047
    Par défaut
    Bonjour,

    En plus simple,
    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
    sToto est une chaîne = [
    	REF+100100
    	Date+110717
    	QTE+10
    	REF+200200
    	Date+110717
    	QTE+20 
    ]
    Chaine_a_ajouter est chaîne 
     
    // Début lecture du fichier texte
    POUR TOUTE CHAÎNE schaine DE sToto SEPAREE PAR RC
    	Chaine_a_ajouter += [TAB] + ExtraitChaîne(schaine,2,"+",DepuisDébut)
    	SI ExtraitChaîne(schaine,1,"+",DepuisDébut) ~= "qte" ALORS
    		TableAjoute(TABLE_SansNom1,Chaine_a_ajouter)
    		Chaine_a_ajouter = ""
    	FIN
    FIN
    Adapté à ton code ça donne:
    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
    // ouvre le fichier à lire
    Handelfichier = fOuvre("D:\Texte.txt",foLecture) //ouverture fichier à lire passé en paramètre
    SI Handelfichier=-1 ALORS // traitement erreur
    	Info(ErreurInfo())
    SINON
    	// Début lecture du fichier texte
    	LigneLue = fLitLigne(Handelfichier)
    	TANTQUE LigneLue<>EOT // tant qu'on n'a pas atteint la fin du fichier
    		Chaine_a_ajouter += [TAB] + ExtraitChaîne(LigneLue,2,"+",DepuisDébut)
    		SI ExtraitChaîne(LigneLue,1,"+",DepuisDébut) = "QTE" ALORS
    			TableAjoute(TABLE_SansNom1,Chaine_a_ajouter)
    			Chaine_a_ajouter = ""
    		FIN
    	FIN
    FIN

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans la documentation de la fonction fOuvre, il est dit cela:
    Pour manipuler des fichiers externes de type texte, il est conseillé d'utiliser les fonctions fChargeTexte/fSauveTexte et fChargeBuffer/fSauveBuffer.
    En suivant cette recommandation, le code serait plutôt comme cela:
    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
    Handelfichier=fChargeTexte("D:\Texte.txt")
    sREF est une chaine=""
    sDate est une chaine=""
    sQTE est un numérique=0
    sColonne est une chaine=""
    POUR TOUTE CHAÎNE sContenuLigne DE sToto SEPAREE PAR RC
          sColonne=SansEspace(ExtraitChaine(sContenuLigne,1,"+"))
          SELON Majuscule(sColonne)
               CAS "REF"
                      sREF=SansEspace(ExtraitChaine(sContenuLigne,2,"+"))
               CAS "DATE"
                      sDate=SansEspace(ExtraitChaine(sContenuLigne,2,"+"))
               CAS "QTE"
                      sQTE=Val(ExtraitChaine(sContenuLigne,2,"+"))
          FIN
     
          SI Majuscule(sColonne)="QTE" Alors
                TableAjouteLigne(TABLE_SansNom1,sREF,sDate,sQTE)
                sREF=""
                sDate=""
                sQTE=0
          FIN
    FIN
    @philouZ: dans la documentation de la fonction TableAjoute, il est marqué cela :
    Remarque : Il est conseillé d'utiliser la fonction TableAjouteLigne.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 047
    Par défaut
    Citation Envoyé par romulus001 Voir le message
    Bonjour,
    @philouZ: dans la documentation de la fonction TableAjoute, il est marqué cela :
    Yes je sais !!! Mais dans son cas, cela va beaucoup plus vite car il n'y a pas de tabulation dans sa chaine. Le TableAjoute pose problème si dans une de tes chaines tu as des tabulations, sinon dans ce cas précis, simplification de code.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par philouZ Voir le message
    Le TableAjoute pose problème si dans une de tes chaines tu as des tabulations
    Je suis au courant de cela et c'est justement pour cela que je n'en sers pas, en même temps, ce qui est pratique avec TableAjouteLigne, c'est qu'on voit les noms des attributs (à condition de ne pas faire de saut de ligne), contrairement à TableAjoute.
    Ce que j'ai voulu dire c'est qu'il fallait prendre de bonnes habitudes en suivant les recommandations de PC SOFT, c'est tout

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

Discussions similaires

  1. Remplir une Table avec 2 tables
    Par Titouf dans le forum Oracle
    Réponses: 4
    Dernier message: 03/11/2005, 09h35
  2. comment remplir une table
    Par donny dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/07/2005, 11h22
  3. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22
  4. [SWT] Comment remplir une Table ?
    Par simon77 dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 23/08/2004, 10h31
  5. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15

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