PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 24 → comment supprimer des lignes vide dans un champs table
comment supprimer des lignes vide dans un champs table
Iniciado por JVE, set., 09 2019 4:43 PM - 15 respostas
Publicado em setembro, 09 2019 - 4:43 PM
Bonjour
Je souhaiterais supprimer les lignes vides dans une table obtenue par programmation et à partir d'un fichier excel.

Comment faire?

Merci
Membro registado
821 mensagems
Publicado em setembro, 09 2019 - 5:00 PM
Bonjour,
Sans ton code d'import, ni ton code de remplissage, on ne peut pas faire grand chose pour toi.
"Allô, docteur, j'ai mal à la cheville, c'est grave ?"

--
Il y a peut être plus simple, mais, ça tourne
Mensagem modificada, setembro, 09 2019 - 5:01 PM
Publicado em setembro, 09 2019 - 8:51 PM
Bonsoir,
En faite, ce n'est pas plus facile de supprimer les lignes vides de EXCEL avant d'importer ?
Membro registado
478 mensagems
Popularité : +2 (4 votes)
Publicado em setembro, 10 2019 - 9:02 AM
Bonjour,

Si on parle bien de table et non de fichier !!


Il est possible lors du remplissage de la table utiliser "FILTRAGE DES ENREGISTREMENTS xxxxxxxxxxxxxxxx".
Ex au plus simple sur un champ issu d'une requete ( peut être sur un champ d'un fichier ) :

Si REQ_xxxx_champ1 = "" alors renvoyer faux

Sinon filtrer sur la requete d'origine, ou utiliser un filtre sur le fichier ... plein de solutions :-)
Christian

--
Christian - kick71
Mensagem modificada, setembro, 10 2019 - 9:14 AM
Membro registado
1.466 mensagems
Popularité : +9 (9 votes)
Publicado em setembro, 10 2019 - 9:27 AM
Bonjour,

Code d'importation ?

--
Bon dev,
Jean-Pierre
Publicado em setembro, 10 2019 - 10:31 AM
Bonjour,

Le plus simple d'importer les données Excel "brutes de fonderie" avec ses lignes vide.
Puis de réaliser une boucle qui parcours toute la table en testant chaque colonne de chaque ligne.
i est un entier
POUR i = 1 _A_ TableOccurrence(LaTable)
SI LaTable.colonne1 = "" ET LaTable.colonne2 = "" ET LaTable.colonne3 = "" ALORS
TableSupprime(Latable,i)
FIN
Multitâche()
FIN


A chaque ligne parcourue si toutes les colonne sont vide alors elles peut être supprimée.
C'est un traitement un peu plus long mais ainsi il est certain de ne supprimer que les enregistrements "stériles"...

Alain
Membro registado
7 mensagems
Publicado em setembro, 10 2019 - 5:25 PM
Bonjour

Merci pour vos réponses. Voici le code :






Ce code supprime aussi des lignes non vides (pour l'instant le test se fait sur les colonnes 2 et 3 de la table)

Salutations
Membro registado
119 mensagems
Publicado em setembro, 10 2019 - 8:11 PM
Bonjour;
Votre code est à revoir, on ajoute les lignes dans la table s'il y a une information, pourquoi ajouter des lignes vides et ensuite les supprimer ?

Remarque concernant la suppression :
la suppression d'une ligne dans un champ table déplace toutes les lignes qui suivent vers le haut.

avec la boucle ( POUR indice = ValeurMin _A_ ValeurMax ) si vous avez deux lignes à supprimer qui se suivent le résultat obtenu sera faux. car en supprimant la ligne Numéro "n" la ligne Numéro "n+1" la remplacera, mais notre indice s'incrémente.
dans ce cas il est préférable d'inverser le parcours dans la boucle qui sera comme suit :

POUR indice = ValeurMax _A_ ValeurMin PAS -1

Bon Dev
Membro registado
821 mensagems
Publicado em setembro, 10 2019 - 9:41 PM
Le faux dans xlsDonnées prend en compte les lignes et colonne vide, si on passe cette option à vrai, elle ne sont pas prises en compte cf https://doc.pcsoft.fr/fr-FR/?3080021&name=xlsdonnee_fonction

--
Il y a peut être plus simple, mais, ça tourne
Membro registado
7 mensagems
Publicado em setembro, 11 2019 - 8:42 AM
Bonjour
Merci pour vos réponses et votre aide.
Malheureusement le changement de Vrai à Faux dans la fonction xlsxDonnées ne fait rien.
Je ne vois pas comment ne pas créer de ligne lors quelles sont vides (pas trouvé ou placer le test).
Le changement de sens de balayage de la boucle POUR (de valeur max à min au lieu de min à max) ne fait rien non plus.




Membro registado
119 mensagems
Publicado em setembro, 11 2019 - 9:34 AM
Bonjour;
Pouvez vous nous simuler un exemple des entrées et sorties ?
- la structure et données du fichier xsl
- le résultat souhaité
Bon Dev.
Membro registado
7 mensagems
Publicado em setembro, 12 2019 - 7:57 AM
Bonjour,

Voici le fichier excel:




Voici l'extraction avant traitement:




Voici les données après traitement:




Ce qui me pose problème c'est les lignes vides que je n'arrive pas à supprimer lors de l'extraction (avec le code de mon message du 11/9). Le traitement et la conversion j'arrive à gérer. Il me restera le rajout de ligne dans la table après extraction (ça à l'air très compliqué mais pas critique de mon coté) et l'enregistrement du résultat en csv.

Merci pour votre aide
Membro registado
821 mensagems
Publicado em setembro, 12 2019 - 9:02 AM
Le test pour savoir si la ligne est vide se fait ... avant de commencer à parcourir la ligne.
Pour nLigneTraitée = 1 _A_ nLigneMax ALORS
SI SansEsapce(xlsDonnée(XlsClasseurTraité,nLigneTraitée,1,Faux))<>"" ALORS
//Lecture des colonnes de la ligne
FIN
FIN


--
Il y a peut être plus simple, mais, ça tourne
Membro registado
254 mensagems
Popularité : +3 (3 votes)
Publicado em setembro, 12 2019 - 9:40 AM
Bonjour,
C'est sûr plutôt que d'enlever, le mieux est de ne pas ajouter !!.
Perso je ferais cela :
sLigne_Colonnes est une chaîne
POUR nLigneEXPRESS = nPremiereLigneEXPRESS _À_ nNbLignesEXPRESS - 2
sLigne_Colonnes = ""

// On parcours toutes es colonnes , on les ajoutes dans la chaine séparées par des TAB
POUR nColonneExXPRESS = 1 À nNbColonnesEXPRESS
sLigneEXPRESS = xlsDonnée(nIDficExpress,nLigneEXPRESS,nColonneExXPRESS,Vrai)
sLigne_Colonnes += [TAB] + SansEspace(sLigneEXPRESS)
FIN
// On vérifie que si on enlève les TAB et qu'il n'y a rien d'autre dans la variable alors c'ets que toutes les colonnes sont vides.
SI SansEspace(Remplace(sLigne_Colonnes,TAB,"")) = "" ALORS
// tout est vide
SINON
// Ce n'est pas vide on ajoute la ligne dans la table.
TableAjouteLigne(TABLE_BON_ORIGINE,sLigne_Colonnes)
FIN
FIN
Membro registado
7 mensagems
Publicado em setembro, 12 2019 - 11:16 AM
Merci beaucoup pour vos réponses
Proposition de Voroltinquo :
Merci beaucoup. Cela fonctionne

Proposition de LM Concept :
En reprenant votre code, je n'ai pas réussi à l'utiliser correctement. Les donnees ne sont extraites que dans la 1ere colonne de la table.


Membro registado
254 mensagems
Popularité : +3 (3 votes)
Publicado em setembro, 12 2019 - 12:06 PM
Oui en effet , une petite erreur de ma part, le TableAjouteLigne ne sépare pas les colonnes par un TAB mais pas une virgule !
https://doc.pcsoft.fr/fr-FR/?3074006&3074006