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
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.
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:
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.
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
Tatayo.
ahah ! ça fonctionne.
J'ai réglé le dernier problème. MaTable.col_DateFin = sDate n'éditait toujours que la première ligne.
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
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 ) .
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager