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 :

Regroupement de ligne d'un table


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Regroupement de ligne d'un table
    Bonjour,

    J'essaie de créer un petit programme pour traiter des données d'un fichier CSV générer automatiquement.
    J'ai déjà récupérer les données du fichier dans une table (données), mais j'ai un problème sur la suite.
    Le CSV génère une ligne par élément et par jour.
    - élément1 ; jour1
    - élément1 ; jour2
    - élément1 ; jour3
    j'aimerais avoir uniquement une ligne par élément avec la date de début et la date de fin dans une autre table(analyse) :
    -élément1 ; Jour1 ; Jour 3

    Malheureusement je ne vois pas par ou commencer avec Windev.

    Merci pour toute l'aide que vous pourrez m'apportez.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 411
    Points : 434
    Points
    434
    Par défaut
    Je veux bien t'aider, mais je n'ai rien compris

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Ton problème est un problème d'algorithme. Si tu programmais en Python ou en C, tu te poserais exactement la même question. Il faut que tu lises 3 ou 4 trucs sur les algorithmes, c'est nécessaire pour débuter.
    Donc tu oublies Windev pendant 2 ou 3 jours, et tu essaies d'écrire l'algorithme correspondant à ce que tu veux faire. Ensuite, cet algorithme, il faudra le traduire en Windev.
    Mais la prorammation, c'est comme la littérature : avant de traduire un livre en langue étrangère, il faut d'abord l'écrire en français.
    En programmation, c'est pareil, avant de traduire un algorithme en Windev ou en Python ou en n'importe quelle langue étrangère, il faut d'abord l'écrire en pseudo-code, et s'assurer que l'algorithme fait ce qu'on voulait.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Voici ce que j'ai rédiger pour le moment :
    Je cherche à prendre des données dans la table données et les transférer dans la table analyse sous un autre formalisme.
    Comme je l'avais écrit dans le premier post, passer d'une ligne par jour par élément( ici Nompr) à une ligne par élément avec un intervalle de date.

    - Nompr1 ; jour1
    - Nompr1 ; jour2 = > Nompr1 ; Jour1 ; Jour 3
    - Nompr1 ; jour3

    - Nompr2 ; jour4

    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
    sNompr est une chaîne= TABLE_données[1,2]
    dDAted est une Date
    dDAtef est une Date
    nPmoy est un entier
    sSource est une chaîne
    incr est un entier = 1
    nIncr2 est un entier = 2
     
     
    BOUCLE
    	TANTQUE sNompr = TABLE_données[(nIncr2 - 1),2]
    		sNompr = TABLE_données[incr,2]
    		dDAted = TABLE_données[1,3]
    		dDAtef = EntierVersDate(DateVersEntier(dDAted)+incr-1)
    		sSource = TABLE_données[incr,11]
    		nPmoy = TABLE_données[incr,6]
    		incr = incr + 1
    		nIncr2 = nIncr2 + 1
    	FIN
    	TableAjouteLigne(TABLE_Analyse,sNompr,dDAted,dDAtef,nPmoy,sSource)
    SI sNompr=" " ALORS SORTIR
    FIN

    La Boucle TANTQUE fonctionne uniquement pour une seule ligne. J'ai principalement deux souci.
    - La variable dated ne doit pas s'incrémenter dans la ligne vu que c'est ma date d'origine. Mais elle doit suivre quand je change de NomPr. Ici je l'ai mis que pour la première ligne.
    - La boucle qui devrait me permettre de passer au Nompr suivant jusqu'à la fin du tableau fais tout simplement planté l'application. j'ai essayé avec un TANQUE Nompr <> " ", même résultat.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 411
    Points : 434
    Points
    434
    Par défaut
    pour lire ton tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pour i = 1 _A_ MonTableau..Occurence
     
    //tes traitements
    trace(MonTableau[i])
     
    fin

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Premier point, tu fais par exemple sNompr = TABLE_données[incr,2] ; c'est beaucoup plus lisible, et plus facile à maintenir, si tu écris : sNompr = TABLE_données[incr].col_nomprJ'ai mis col_nompr ... je ne sais pas comment s'appelle la colonne dans ton cas.

    Voici un morceau de code qui devrait à peu prs marcher. J'ai mis juste la structure,il va falloir que tu adaptes plein de choses.
    En fait, je n'utilise pas ta table table_donnees. C'est plus simple de partir directement du fichier CSV et de faire la mise en forme à ce moment là.

    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
    sFic , sLig est une chaine
    nf , nColCLE , nColDate est un entier 
    oldCle , cle  est une chaine
    oldDate, date0 est une chaine
    sFic = "monFichier.csv"
    nColCle = 1 
    nColDate = 2 // Je pars du principe que la clé est la première colonne du fichier, et la date en 2ème colonne.
    nf = fouvre( sfic)
    lig = flitligne(nf) ; cle = extraitchaine(slig, ncolCle, ";") ; date0 =  extraitchaine(slig, ncolDate, ";")   // j'imagine que le séparateur, c'est ;
    tantque lig <> EOT
       oldCle = cle 
       oldDate = date0
       tantque lig <> EOT _et_ cle = oldCle
           lig = flitligne(nf) ; 
           si lig <> EOT alors 
              cle = extraitchaine(slig, ncolCle, ";") ; date0 =  extraitchaine(slig, ncolDate, ";")
          fin
       fin
       tableajouteligne( tableanalyse, oldCle, olddate, date0 )
    FIN 
    fferme(nf)
    J'ai tapé tout ça à la volée, pas testé, mais j'ai tellement souvent utilisé cette structure de programme que je suis confiant.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  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
    Hello tbc92,

    Pourquoi ne passes-tu pas par une chaîne avec un MonTexte = fchargetexte(MonFichier) + pour toute chaine Machaine de MonTexte séparée par RC ?

    C'est juste histoire de chipouiller
    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 émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    998
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 998
    Points : 2 524
    Points
    2 524
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Hello tbc92,

    Pourquoi ne passes-tu pas par une chaîne avec un MonTexte = fchargetexte(MonFichier) + pour toute chaine Machaine de MonTexte séparée par RC ?

    C'est juste histoire de chipouiller
    Parce qu'il s'adresse à un débutant.
    Il lui donne les bases, le principe.

  9. #9
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Et avec la syntaxe Pour TOUT ... le traitement du dernier élément ou groupe d'éléments est un peu galère. On est quasi obligé d'avoir ce traitement à 2 endroits dans le code.
    Ici, ce bloc de code est très simple, il se limite à l'instruction TableAjouteLigne(). Mais dans la vraie vie, il peut être plus compliqué.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  10. #10
    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 serendib Voir le message
    Parce qu'il s'adresse à un débutant.
    Il lui donne les bases, le principe.
    C'est bien pour ça que je disais que je chipouillais.

    Citation Envoyé par tbc92 Voir le message
    Et avec la syntaxe Pour TOUT ... le traitement du dernier élément ou groupe d'éléments est un peu galère. On est quasi obligé d'avoir ce traitement à 2 endroits dans le code.
    Ici, ce bloc de code est très simple, il se limite à l'instruction TableAjouteLigne(). Mais dans la vraie vie, il peut être plus compliqué.
    Lorsque je travaillais avec mes fichiers plats, je n'ai pas souvenir d'avoir eu ce souci. L'avantage non négligeable que j'avais, était la rapidité de traitement. Les lectures sequentielles ralentissaient pas mal le programme (fichier sur un lecteur mappé).
    Mais, comme je le sous-entendais, ta solution est très bien.
    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

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 411
    Points : 434
    Points
    434
    Par défaut
    @tbc92

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pour i = 1 _A_ MonTableau..Occurence
    si rupture rupture() 
     
    trace(MonTableau[i])
     
    fin
    rupture()
     
    procedure interne rupture()
    fin
    @frenchsting : t'as tout compris

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Premier point, tu fais par exemple sNompr = TABLE_données[incr,2] ; c'est beaucoup plus lisible, et plus facile à maintenir, si tu écris : sNompr = TABLE_données[incr].col_nomprJ'ai mis col_nompr ... je ne sais pas comment s'appelle la colonne dans ton cas.

    Voici un morceau de code qui devrait à peu prs marcher. J'ai mis juste la structure,il va falloir que tu adaptes plein de choses.
    En fait, je n'utilise pas ta table table_donnees. C'est plus simple de partir directement du fichier CSV et de faire la mise en forme à ce moment là.

    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
    sFic , sLig est une chaine
    nf , nColCLE , nColDate est un entier 
    oldCle , cle  est une chaine
    oldDate, date0 est une chaine
    sFic = "monFichier.csv"
    nColCle = 1 
    nColDate = 2 // Je pars du principe que la clé est la première colonne du fichier, et la date en 2ème colonne.
    nf = fouvre( sfic)
    lig = flitligne(nf) ; cle = extraitchaine(slig, ncolCle, ";") ; date0 =  extraitchaine(slig, ncolDate, ";")   // j'imagine que le séparateur, c'est ;
    tantque lig <> EOT
       oldCle = cle 
       oldDate = date0
       tantque lig <> EOT _et_ cle = oldCle
           lig = flitligne(nf) ; 
           si lig <> EOT alors 
              cle = extraitchaine(slig, ncolCle, ";") ; date0 =  extraitchaine(slig, ncolDate, ";")
          fin
       fin
       tableajouteligne( tableanalyse, oldCle, olddate, date0 )
    FIN 
    fferme(nf)
    J'ai tapé tout ça à la volée, pas testé, mais j'ai tellement souvent utilisé cette structure de programme que je suis confiant.

    J'ai essayé ça et ça marche bien, sauf un petit soucis que je n'arrive pas à identifier et qui doit venir de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    si lig <> EOT alors 
              cle = extraitchaine(slig, ncolCle, ";") ; date0 =  extraitchaine(slig, ncolDate, ";")
          fin
    j'ai un décalage entre la première colonne (oldCLE) et la seconde (oldDate) par rapport aux suivante (date0,...). les champs suivant correspondent à ceux de la ligne du dessous.
    ce qui me donne OldCLE1, oldDate1, olDate2.
    Et j'ai donc la dernière linge avec la dernière cellule vide.

    Merci pour l'aide que vous m'apportez et je suis désolé de vous importuner avec des questions aussi basiques .

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sLig = fLitLigne(nf) ; sCle = ExtraitChaîne(sLig,nColCLE, ";") ; sDate0 =ExtraitChaîne(sLig,nColdate,";") ; 
    TANTQUE sLig <> EOT
    	sOldcle = sCle
    	sOldDate = sDate0
    	TANTQUE sLig <> EOT  ET sCle = sOldcle 
    				sLig= fLitLigne(nf)  
    		SI sLig <> EOT ALORS
    			sCle = ExtraitChaîne(sLig, nColCLE,";") ; sDate0 = ExtraitChaîne (sLig, nColdate,";") ;  sPmoy =ExtraitChaîne(sLig,nColPmoy,";") ; sSource =ExtraitChaîne(sLig,nColSource,";")
    		FIN
    	FIN
    	TableAjouteLigne(TABLE_Analyse,sOldcle,ChaîneVersDate(sOldDate),ChaîneVersDate(sDate0),sPmoy ,sSource)
     
    FIN
    Après analyse c'est les trois derniers termes de la ligne TableAjouteLigne qui pose problème (ChaîneVersDate(sDate0),sPmoy ,sSource).
    Avec TANTQUE sLig <> EOT ET sCle = sOldcle, cela permet de continuer la lécture de ligne, tant que le nom ne change pas.
    Par contre cela voudrait dire qu'il y a un changement de ligne dès que la condition est vérifiée.
    C'est le sLig= fLitLigne(nf) après le TANTQUE qui causerait ce décalage ?

  14. #14
    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
    tu fais avant ton tantque...

    Je supprimeris donc cette ligne et je ferais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI sLig <> EOT ALORS
    	sOldcle = sCle
    	sCle = ExtraitChaîne(sLig, nColCLE,";") ; sDate0 = ExtraitChaîne (sLig, nColdate,";") ;  sPmoy =ExtraitChaîne(sLig,nColPmoy,";") ; sSource =ExtraitChaîne(sLig,nColSource,";")
    FIN
    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

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    j'ai essayé de supprimer
    avant le TANTQUE et de le mettre dans la boucle SI ALORS, le test n'aboutit pas.

  16. #16
    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
    Arghh, j'ai lu trop vite le code hier... et pas vu la première boucle.
    Effectivement, c'était mieux avant.

    Il faudrait que tu mettes un point d'arrêt dans ta 2° boucle pour voir ce qu'il s'y passe (ou pas). Ton fichier initial est gros ?
    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

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mars 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Amateur
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2019
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    j'ai trouvé le soucis je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TANTQUE sLig <> EOT  ET sCle = sOldcle 
    			sLig= fLitLigne(nf)  
    		SI sLig <> EOT ALORS
    			sCle = ExtraitChaîne(sLig, nColCLE,";") ; sDate0 = ExtraitChaîne (sLig, nColdate,";") ;  sPmoy =ExtraitChaîne(sLig,nColPmoy,";") ; sSource =ExtraitChaîne(sLig,nColSource,";")
    		FIN
    Quand j'arrive à cette ligne, la chaine extrait dans slig change pour la ligne du dessous, ce qui explique le décalage vu que mes deux premier paramètres sont défini avant ( oldcle et olddate).
    mais si je sort le slig=flitligne(nf) de la boucle, la ligne n'avance pas et le programme tourne en rond vu qu'il lit toujours la même ligne.
    Le problème vient du fait que sur la dernière vérification sCle = OldCle, ce qui correspond à la dernière ligne avec la dernière date, le slig=flitligne(nf) décalle à la ligne du dessous, qui à pour conséquence que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sCle = ExtraitChaîne(sLig, nColCLE,";") ; sDate0 = ExtraitChaîne (sLig, nColdate,";") ;  sPmoy =ExtraitChaîne(sLig,nColPmoy,";") ; sSource =ExtraitChaîne(sLig,nColSource,";")
    extrait la ligne d'après, qui correspond à un nom(sCle) différend. Je ne vois pas comment faire fonctionner la boucle correctement malheureusement.

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Tu as deux façons de faires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TANTQUE sLig <> EOT
        Ton traitement
        sLig= fLitLigne(nf)  
    FIN
    Le fLitLigne doit être lancé à chaque itération, sans condition. Sinon effectivement tu pars dans une boucle infinie...
    Autre solution, plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sContenu est une chaine
    sLigne est une chaine
    sContenu = fchargetexte("le chemin\nom du fichier")
    POUR TOUTE CHAINE DE sContenu SEPAREE PAR RC
        Ton traitement
    FIN
    Pour ma part je préfère la deuxième solution, mais attention si le fichier lu a une chance d'être TRES gros, ça risque de ne pas passer (enfin en 32 bits).

    Tatayo.

  19. #19
    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
    @Tatayo, je préfère également la 2° solution, mais j'essaye de ne pas embrouiller notre débutant

    C'est effectivement dans ta boucle "interne" qui ça ne va pas. Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sLig = fLitLigne(nf) ; sCle = ExtraitChaîne(sLig,nColCLE, ";") ; sDate0 =ExtraitChaîne(sLig,nColdate,";") ; 
    TANTQUE sLig <> EOT
    	TANTQUE sLig <> EOT  ET sCle = sOldcle 
    		sOldcle = sCle
    		sOldDate = sDate0
    		sLig= fLitLigne(nf)  
    		SI sLig <> EOT ALORS
    			sCle = ExtraitChaîne(sLig, nColCLE,";") ; sDate0 = ExtraitChaîne (sLig, nColdate,";") ;  sPmoy =ExtraitChaîne(sLig,nColPmoy,";") ; sSource =ExtraitChaîne(sLig,nColSource,";")
    		FIN
    	FIN
    	TableAjouteLigne(TABLE_Analyse,sOldcle,ChaîneVersDate(sOldDate),ChaîneVersDate(sDate0),sPmoy ,sSource)
    FIN
    PS : je n'ai pas testé du tout.... Je dis ça juste parce que tu pourrais avoir un souci avec la première ligne de ton fichier...
    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

  20. #20
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Ca ne fonctionnera pas.
    A la lecture de la première ligne, sCle est différent de sOldCle, donc le test de la ligne 3 n'est pas vérifié, donc les lignes 4 à 9 ne sont jamais exécutées, donc sOldCle jamais affecté et fLitLigne jamais lancé… boucle infinie.
    Ceci devrait fonctionner:
    Code WinDev : 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
     
    sLig = fLitLigne(nf)
    TANTQUE sLig <> EOT
    	sCle = ExtraitChaîne(sLig, nColCLE,";")
    	sDate0 = ExtraitChaîne (sLig, nColdate,";")
    	sPmoy =ExtraitChaîne(sLig,nColPmoy,";")
    	sSource =ExtraitChaîne(sLig,nColSource,";")
    	si sCle <> sOldCle et sOldCle <> "" alors
    		TableAjouteLigne(TABLE_Analyse,sOldcle,ChaîneVersDate(sOldDate),ChaîneVersDate(sDate0),sPmoy ,sSource)
    	fin
    	sOldcle = sCle
    	sOldDate = sDate0
    	sLig = fLitLigne(nf) 
    FIN
    si sCle <> ""
    	TableAjouteLigne(TABLE_Analyse,sOldcle,ChaîneVersDate(sOldDate),ChaîneVersDate(sDate0),sPmoy ,sSource)
    fin

    Le fLitLigne est lancé de façon inconditionnelle, donc on est assuré que chaque ligne du fichier est lu.
    La sortie du fichier (le EOT) n'est vérifié qu'une seule fois, à chaque itération.
    Je n'ai qu'un doute, c'est sur l'affectation de sOldDate. Est-ce qu'il faut le faire à chaque boucle, ou à chaque ajoute d'une ligne dans la table ?

    Tatayo.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WD22] Regrouper plusieurs lignes d'une table en une seule chaîne
    Par BurellierC dans le forum WinDev
    Réponses: 2
    Dernier message: 20/09/2017, 15h57
  2. Regrouper un champ d'une table sur une meme ligne
    Par llulu24 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 15/05/2008, 12h17
  3. table regroupant les lignes en doubles
    Par jamelie dans le forum SAS Base
    Réponses: 7
    Dernier message: 10/04/2008, 14h46
  4. Regrouper 3 lignes en provenance de 2 tables
    Par Jamic dans le forum SQL
    Réponses: 6
    Dernier message: 20/03/2008, 16h31
  5. Effacer une ligne dans la table nat
    Par vbcasimir dans le forum Sécurité
    Réponses: 2
    Dernier message: 11/01/2004, 00h15

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