1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Supprimer les virgules entre quotes

Discussion dans 'Résolution problème & conseils' créé par *!vince!*, Juil 4, 2018.

  1. *!vince!*

    *!vince!* Member

    Inscrit:
    Juin 26, 2018
    Messages:
    62
    J'aime reçus:
    26
    Bonjour à tous,

    Je suis face à un cas que vous avez peut-être déjà dû rencontrer.
    Je me trouve avec un fichier CSV à traiter et celui-ci contient des nombres de types flottant entre quotes
    Je ne trouve pas la solution adéquat pour extraire les différents éléments de chaque ligne de mon fichier correctement.

    J'ai ceci: CLI2,60,"61,2","81,4","113,3",131,133
    et je souhaiterai cela: CLI2 60 61.2 81.4 113.3 131 133

    Si vous connaissez une solution me permettant de résoudre ce cas, merci de le partager.

    J'ai essayé avec les méthodes:
    contient()
    VérifieExpressionRégulière()
    Remplace()

    et je n'ai pas trouver de logiciel qui résolve cette problématique que je pourrais utiliser avec LanceAppli().

    Je m'en remets à vous.

    Pour info: j'ai une intégration de 500 fichiers contenant une trentaine de ligne comme celles-ci que je dois transféré dans HFSQL. GLPS!
     
    Tags:
  2. *!vince!*

    *!vince!* Member

    Inscrit:
    Juin 26, 2018
    Messages:
    62
    J'aime reçus:
    26
    Hahaha! Hohoho!
    Peut-être que flitligneexpressionreguliere() résoudra mon problème!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  3. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,947
    J'aime reçus:
    1,569
    il faut plutôt recréer la chaîne
    une virgule a l'intérieur de cote est a remplacé par un point.
    puis la virgule devient le séparateur
     
  4. *!vince!*

    *!vince!* Member

    Inscrit:
    Juin 26, 2018
    Messages:
    62
    J'aime reçus:
    26
    Ça j’avais deviné. Quid du remplacement de la virgule entre les quotes !

    Quelque chose comme ça:
    Flitligneexpressionreguliere((« [0-9]*,[0-9]*»), sMot)
    Remplace(sMot, « , », « .»)

    Qu’en dites vous?
     
    #4 *!vince!*, Juil 4, 2018
    Dernière édition par un modérateur: Juil 4, 2018
  5. ProDev

    ProDev Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    372
    J'aime reçus:
    373
    @

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    tu peux nous uploader le fichier csv? stp
     
  6. *!vince!*

    *!vince!* Member

    Inscrit:
    Juin 26, 2018
    Messages:
    62
    J'aime reçus:
    26
    Je ne pourrais pas le faire avant demain après-midi ou après-demain car je n’es serai pas à mon bureau. (Je travaille depuis mon téléphone là)
    Si tu veux tu peux simplement reproduire la ligne d’exemple que j’ai posté dans le sujet, les autres lignes sont quasiment identique.

    Merci.
     
  7. channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    Bonsoir

    Voici comment résoudre ton problème :

    [windev]
    sClients est une chaîne = "CLI2,60,""61,2"",""81,4"",""113,3"",131,133"
    sSousChaine est une chaîne
    sSousChaineReplacee est une chaîne

    i est un entier = 2

    sSousChaine=ExtraitChaîne(sClients,i,"""")

    TANTQUE sSousChaine <> "" _ET_ sSousChaine <> EOT

    sSousChaineReplacee= Remplace(sSousChaine,",",".")
    sClients = Replace(sClients,sSousChaine,sSousChaineReplacee)
    i+=2
    sSousChaine=ExtraitChaîne(sClients,i,"""")
    FIN

    sClients=ChaîneSupprime(sClients,"""")

    POUR TOUTE CHAÎNE sOus DE sClients SEPAREE PAR ","
    SAI_Clients += sOus +RC
    FIN

    [/windev]
     
    suenodesign apprécie ceci.
  8. *!vince!*

    *!vince!* Member

    Inscrit:
    Juin 26, 2018
    Messages:
    62
    J'aime reçus:
    26
    Excellent,

    Je me permet de retoucher un peu la procédure pour que l'on puisse directement lui envoyer un CSV

    PROCEDURE RemplaceVirguleEntreQuote(LOCAL sCheminFichier est une chaîne)

    sContenu est une chaîne = fChargeTexte(sCheminFichier)

    sSousChaine est une chaîne

    sSousChaineReplacee est une chaîne

    i est un entier = 2


    sSousChaine=ExtraitChaîne(sContenu,i,"""")


    TANTQUE sSousChaine <> "" _ET_ sSousChaine <> EOT

    sSousChaineReplacee= Remplace(sSousChaine,",",".")

    sContenu = Replace(sContenu,sSousChaine,sSousChaineReplacee)

    i+=2

    sSousChaine=ExtraitChaîne(sContenu,i,"""")

    FIN


    sContenu=ChaîneSupprime(sContenu,"""")


    fSauveTexte(sCheminFichier,sContenu)



    Merci Channibal!
    YOU MADE MY DAY!
     
  9. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    L'idée de

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    est pas mal, mais il a séparé 81 et 4 alors que c'est 81.4 et de même pour 113 et 3.

    Ce qui faut aussi retenir, c'est qu'ils sont entre double cotes parce qu'ils ont des décimales,
    il pourrait y avoir des entiers : => CLI2,60,"61,2",85,"113,3",131,133
    et dans ce cas là, il n'y a pas de double cotes.
    Code (Text):
    FUNCTION RemplaceSeparateurEntreDoubleCotes(sLigne, sSep, sNouveau)

    sLigneFinale est une chaîne
    sLignePartie est une chaîne
    nPos est un entier = 2

    sLigneFinale = ExtraitChaîne(sLigne, 1, """")
    sLignePartie = ExtraitChaîne(sLigne, nPos, """")

    TANTQUE PAS sLignePartie = EOT
        SI sLignePartie[[1]] = sSep ALORS
            sLigneFinale += sLignePartie
        SINON
            sLigneFinale += Remplace(sLignePartie, sSep, sNouveau)
        FIN
        nPos++
        sLignePartie = ExtraitChaîne(sLigne, nPos, """")
    FIN

    RENVOYER sLigneFinale
    Les petits tests :
    Info(RemplaceSeparateurEntreDoubleCotes("CLI2,60,""61,2"",""81,4"",""113,3"",131,133", ",", "."))
    => CLI2,60,61.2,81.4,113.3,131,133

    Info(RemplaceSeparateurEntreDoubleCotes("CLI2,60,""61,2"",85,""113,3"",131,133", ",", "."))
    => CLI2,60,61.2,85,113.3,131,133
     
    #9 FreudWD, Juil 5, 2018
    Dernière édition: Juil 5, 2018
  10. channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277
    @

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Voici le résultat du code : je ne vois pas où est séparé le 81 et le 4 ?
    [​IMG]
    [​IMG]
    Le même résultat avec un fichier texte comme source :

    [​IMG]
    [​IMG]
     
    #10 channibal, Juil 5, 2018
    Dernière édition: Juil 5, 2018
  11. FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    200
    J'aime reçus:
    374
    Tu as raison, c'est moi qui avais une paire de double cotes en trop dans la source,
    comment ??? avec un copier / coller, c'est le comble.
    En tout cas, ta procédure fonctionne même avec des entiers.

    Edit :

    La honte sur toute ma famille et ma descendance, jusuq'à la 20e génération.
     
    #11 FreudWD, Juil 5, 2018
    Dernière édition: Juil 5, 2018
    *!vince!* apprécie ceci.
  12. joker

    joker New Member
    MEMBRE WX

    Inscrit:
    Jan 30, 2018
    Messages:
    0
    J'aime reçus:
    14

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Tu as raison, c'est moi qui avais une paire de double cotes en trop dans la source,
    comment ??? avec un copier / coller, c'est le comble.
    En tout cas, ta procédure fonctionne même avec des entiers.
    Edit :
    La honte sur toute ma famille et ma descendance, jusuq'à la 20e génération.
    Cliquez pour agrandir...
    ;)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Il n'y a pas de honte à reconnaitre ses erreurs bien au contraire ! :winkytongue:
     
    *!vince!* apprécie ceci.
  • channibal

    channibal Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 22, 2018
    Messages:
    210
    J'aime reçus:
    277

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Tu as raison, c'est moi qui avais une paire de double cotes en trop dans la source,
    comment ??? avec un copier / coller, c'est le comble.
    En tout cas, ta procédure fonctionne même avec des entiers.

    Edit :

    La honte sur toute ma famille et ma descendance, jusuq'à la 20e génération.
    Cliquez pour agrandir...
    Bonjour

    Pas grave :closedeyesmile::closedeyesmile::closedeyesmile:

    Si t'as manipuler du COBOL alors tu devrai savoir qu'un seul point manquant peut générer plus de 99 erreurs x'Dx'Dx'Dx'D

    ça ma arrivé dans tout mon premier programme en COBOL le fameux "HELLO WORLD" j'ai oublié le point final, je compile et hop 99 erreurs XDXDXD j'ai passé des heures a chercher l'erreur ou les 99 erreurs plus précieusement :openedeyewink: sans succes jusqu'a l'intervention d'un proff qui m'a expliquer que c'est le COBOL!! c'est comme ça!! :D
    ça fait presque 20 ans mais la frustration est permanente x'Dx'Dx'D
     
    *!vince!* apprécie ceci.
  • Partager cette page

    Chargement...