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. #21
    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 C'est bien pour cela que j'avais écrit ça :
    Citation Envoyé par frenchsting Voir le message
    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

  2. #22
    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 tatayo Voir le message
    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.
    le but du traitement est de concaténer des lignes sur un classeurs CSV . Le Classeur génère une ligne par jour, je cherche à regrouper ces lignes en une seule.
    Avec la date de début qui correspond à la date de la première ligne ou l’élément la colonne 1 apparait (sOldcle) et la date de fin la dernière fois qu'il apparait.
    Donc en principe, Oldate ne doit être enregistrer qu'une fois avant d'être ajouté à la ligne.
    J'ai testé ton traitement et je me retrouve avec le " même problème " qu'avant .
    La première ligne du fichier CSV ne comporte qu'une date avant de changer de d’élément sur la colonne 1.
    Après la Boucle SI, on définit OldCle et OldDate. Le Flitligne après lit la ligne suivante.
    Sauf que vu que la Condition du TANTQUE <> EOT est toujours bonne, on recommence le traitement et c'est la qu'on rente dans la boucle SI et qu'on ajoute la ligne, mais avec le OldCle et le Oldate de la ligne 1 et le reste de la ligne 2.
    J'ai essayé de mettre une condition supplémentaire sur le TANTQUE
    => OldCle <> de la partie de la chaine de sLig qui lui correspond. Ce qui en théorie ferait sortir de la boucle TANTQUE sans changer les paramètres et attaquer la dernière boucle SI pour ajouter la ligne . mais je ne vois pas comment taper ça.

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je vois une solution plus simple (mais potentiellement plus lente):
    A chaque ligne lue, tu cherches dans la table si tu as déjà une ligne avec la même clé. Si tu trouves, tu affectes la date de fin, sinon tu ajoutes une nouvelle ligne avec la clé et la date de début.
    Voici une ébauche de code:
    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
     
    sLigneLue = fLitLigne(idFic)
    TANTQUE sLigneLue <> EOT
    	sCle = extraitchaine(sLigneLue,1,tab)
    	sDate = extraitchaine(sLigneLue,2,tab)
    	nIndice = TableCherche(col_cle,sCle,rechercheIdentique)
    	si nIndice < 0 alors
    		// Ici la clé est absente de la table, donc tu ajoutes une nouvelle ligne
    		TableAjouteLigne(cle,...) // la liste des colonnes, en mettant la date courante en date de début et de fin
    	sinon
    		// La clé a été trouvé dans la table, donc la date de fin doit être mise à jour
    		MaTable.col_DateFin = sDate
    	fin
    	sLigneLue = fLitligne(IdFic)
    FIN
    Quand je dois faire ce genre de code pour traiter de gros volumes de données, j'ai l'habitude de travailler sur des tableaux d'objets en mémoire, et je n'affiche le résultat qu'à la fin.

    Tatayo.

  4. #24
    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
    ahah ! ça fonctionne.

    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
    nIndice est un entier
    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,";")
    	nIndice = TableCherche(COL_Libélé,sCle,rechercheIdentique) 
    		SI nIndice < 0 ALORS
    		TableAjouteLigne(TABLE_Analyse,sCle,ChaîneVersDate(sDate0),ChaîneVersDate(sDate0),sPmoy ,sSource)
    	SINON
    		cpt = TableOccurrence(TABLE_Analyse)
    		TABLE_Analyse[cpt,3] = ChaîneVersDate(sDate0)
    	FIN
    	sLig = fLitLigne(nf)
    FIN
    J'ai réglé le dernier problème. MaTable.col_DateFin = sDate n'éditait toujours que la première ligne.
    Avec cpt = TableOccurrence(TABLE_Analyse) ; TABLE_Analyse[cpt,3] = ChaîneVersDate(sDate0), cela me permet d'éditer toujours la dernière ligne.

    Merci à tous pour le coup de main. Quand je me suis engagé la dedans , je ne pensais pas que ça serait si laborieux ( enfin pour moi ) .

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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