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

WD Fichier CSV

Discussion dans 'Windev' créé par visvic, Fev 27, 2019.

  1. visvic

    visvic Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    48
    J'aime reçus:
    24
    Bonjour @TOUS,

    Je dois "mouliner" des données reçu vers un fichier CSV avec un ordre précis (évidemment) et une longueur précise par valeur:

    valeur1 = longueur 35;valeur2 = longueur 17;valeur3 = longueur 35;etc...

    quel serais selon vous la meilleur méthode a adapter (plus de 60 valeurs), en essayant de rendre cela simple à maintenir:
    - Créer une structure ?
    - Les déclarer en variables ?
    - Les déclarer en live au moment du traitement ?
    Tout en sachant que je dois mettre tous les ";" etant donnée qu'une valeur en position 50 (par exemple) sera reçu.

    Merci par avance pour vos retour
     
    #1 visvic, Fev 27, 2019
    Dernière édition: Fev 27, 2019
    Tags:
  2. grkonan

    grkonan New Member

    Inscrit:
    Fev 23, 2018
    Messages:
    7
    J'aime reçus:
    1
    Les valeurs sont aléatoires ou fixes ?
    Y a t il un retour de chariot après chaque groupe de données ?
     
  3. khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    446
    J'aime reçus:
    142

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

    Bonjour @TOUS,

    Je dois "mouliner" des données reçu vers un fichier CSV avec un ordre précis (évidemment) et une longueur précise par valeur:

    valeur1 = longueur 35;valeur2 = longueur 17;valeur3 = longueur 35;etc...

    quel serais selon vous la meilleur méthode a adapter (plus de 60 valeurs), en essayant de rendre cela simple à maintenir:
    - Créer une structure ?
    - Les déclarer en variables ?
    - Les déclarer en live au moment du traitement ?
    Tout en sachant que je dois mettre tous les ";" etant donnée qu'une valeur en position 50 (par exemple) sera reçu.

    Merci par avance pour vos retour
    Cliquez pour agrandir...
    Perso j'utiliserais les double "[" pour l'extraction des sous chaines dans un parcours (si caractère de séparation de ligne)
    tu peux donc affecter a chacune de tes variables une sous chaine. puis tu construit ta chaine csv (en incluant les ";" )

    ex si donnée dans un fichier
    Code (Windev):

    variable est tableau <agrandissement> de 0 par 2 chaines
    nFichier,i  est entier
    sLigne ,monfichiercsv est chaine

    i=1
    nFichier =

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

    (tonfichier,foLecture) //remplacer tonfichier par le chemin de ton fichier
    sLigne =

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

    (nFichier ,

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

    (10)) //si retour chariot en fin de ligne
    TANTQUE sLigne <> EOT

        variable[i,1] = sLigne[[1 SUR 35]]
        variable[i,2] = sLigne[[36 SUR 38]]
        variable[i,3] = sLigne[[39 SUR 56]]
        variable[i,4] = sLigne[[57 SUR 60]]
       .....
    i++
    sLigne =

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

    (nFichier ,

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

    (10))
    fin
    monfichiercsv =

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

    (variable)

     
    après
    tu as logiquement le contenu de ton fichier dans la chaîne a sauvegarder.


    j'ai pas tester
     
    Fouedusa apprécie ceci.
  • grkonan

    grkonan New Member

    Inscrit:
    Fev 23, 2018
    Messages:
    7
    J'aime reçus:
    1
    [windev]
    sqlREQ est une Source de Données
    sListeRub est une chaîne
    sContenuEnreg est une chaîne
    sReq est une chaîne = "REQUETE SQL"

    HExécuteRequêteSQL(sqlREQ, hRequêteDéfaut, sReq)
    // Liste des rubriques de la requête.
    sListeRub = HListeRubrique(sqlREQ)

    //Traitement des colonnes
    POUR TOUTE CHAÎNE sUneRubrique DE sListeRub SEPAREE PAR RC
    sContenuEnreg += sUneRubrique+";"
    FIN
    sContenuEnreg+=RC

    // Parcours de la requête
    POUR TOUT sqlREQ
    sContenuEnreg = ""
    // Pour chaque enregistrement, il faut parcourir les rubriques
    POUR TOUTE CHAÎNE sUneRubrique DE sListeRub SEPAREE PAR RC
    sContenuEnreg += {"sqlREQ." + sUneRubrique, indRubrique}+";"
    FIN
    sContenuEnreg +=RC
    FIN
    fsauvetexte("chemin_du_fichier",sContenuEnreg)[/windev]
     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    446
    J'aime reçus:
    142

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

    [windev]
    sqlREQ est une Source de Données
    sListeRub est une chaîne
    sContenuEnreg est une chaîne
    sReq est une chaîne = "REQUETE SQL"

    HExécuteRequêteSQL(sqlREQ, hRequêteDéfaut, sReq)
    // Liste des rubriques de la requête.
    sListeRub = HListeRubrique(sqlREQ)

    //Traitement des colonnes
    POUR TOUTE CHAÎNE sUneRubrique DE sListeRub SEPAREE PAR RC
    sContenuEnreg += sUneRubrique+";"
    FIN
    sContenuEnreg+=RC

    // Parcours de la requête
    POUR TOUT sqlREQ
    sContenuEnreg = ""
    // Pour chaque enregistrement, il faut parcourir les rubriques
    POUR TOUTE CHAÎNE sUneRubrique DE sListeRub SEPAREE PAR RC
    sContenuEnreg += {"sqlREQ." + sUneRubrique, indRubrique}+";"
    FIN
    sContenuEnreg +=RC
    FIN
    fsauvetexte("chemin_du_fichier",sContenuEnreg)[/windev]
    Cliquez pour agrandir...
    si les données de départ son dans un fichier fic (j'avais cru comprendre que c'etait des données bruts) pourquoi ne pas utiliser directement

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

     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    446
    J'aime reçus:
    142

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

    [windev]
    sqlREQ est une Source de Données
    sListeRub est une chaîne
    sContenuEnreg est une chaîne
    sReq est une chaîne = "REQUETE SQL"

    HExécuteRequêteSQL(sqlREQ, hRequêteDéfaut, sReq)
    // Liste des rubriques de la requête.
    sListeRub = HListeRubrique(sqlREQ)

    //Traitement des colonnes
    POUR TOUTE CHAÎNE sUneRubrique DE sListeRub SEPAREE PAR RC
    sContenuEnreg += sUneRubrique+";"
    FIN
    sContenuEnreg+=RC

    // Parcours de la requête
    POUR TOUT sqlREQ
    sContenuEnreg = ""
    // Pour chaque enregistrement, il faut parcourir les rubriques
    POUR TOUTE CHAÎNE sUneRubrique DE sListeRub SEPAREE PAR RC
    sContenuEnreg += {"sqlREQ." + sUneRubrique, indRubrique}+";"
    FIN
    sContenuEnreg +=RC
    FIN
    fsauvetexte("chemin_du_fichier",sContenuEnreg)[/windev]
    Cliquez pour agrandir...
    et pour citer

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


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

    Cliquez pour agrandir...
    en fait on se fait avoir par le "code windev" qui met une balise [windev] mais faut mettre "code=windev" entre crochet
     
    suenodesign apprécie ceci.
  • grkonan

    grkonan New Member

    Inscrit:
    Fev 23, 2018
    Messages:
    7
    J'aime reçus:
    1

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

    si les données de départ son dans un fichier fic (j'avais cru comprendre que c'etait des données bruts) pourquoi ne pas utiliser directement

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

    Cliquez pour agrandir...
    Bien sûre si c'est fichier hyperfile
     
  • visvic

    visvic Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    48
    J'aime reçus:
    24
    Salut à tous,

    Merci pour vos réponse.

    En fait il vrai après rétrospective, que je n'ai pas explicité ma demande correctement.

    Pour faire simple j'ai un fichier TXT avec des valeurs séparées par des "TAB"
    Je dois "mouliner" ces données afin de réordonnées l'ordre des valeurs, et de les séparées par des virgules.

    J'ai trouvé ma solution avec une table de données, tableverschaine(), et fsauveTexte()

    [windev]
    HSupprimeTout(ExportGefco_V:relievedface:

    sChemin est une chaîne = "D:\chemindufichier"
    sNomFichierImporter est une chaîne = "ListeExportCiel.txt"
    sNomFichierExporter est une chaîne = "ListeExportGefco.csv"

    sContenuFichier est une chaîne = fChargeTexte(sChemin+sNomFichierImporter)

    POUR TOUTE CHAÎNE sLigne, nPosition, nCompteur DE sContenuFichier SEPAREE PAR RC
    IF nCompteur <> 1 THEN
    // Valeur par défaut
    ExportGefco_V3.CodeTransporteur = "GEFC"
    ExportGefco_V3.CodeTrafic = "3"
    ExportGefco_V3.PortOuIncoterm = "PP"
    ExportGefco_V3.DateExpéditon = DateDuJour()
    ExportGefco_V3.RendezVousENL = "0"
    ExportGefco_V3.Cotation = "0"
    ExportGefco_V3.DIL = "0"
    ExportGefco_V3.RendeVousExpédition = "0"
    // Fin valeur par défaut

    // Valeur ajoutées par lecture fichier
    ExportGefco_V3.RéférenceBL = ExtraitChaîne(sLigne,1,TAB)
    ExportGefco_V3.DateExpéditon = ChaîneVersDate(ExtraitChaîne(sLigne,2,TAB))
    ExportGefco_V3.CodeDestinataire = ExtraitChaîne(sLigne,3,TAB)
    ExportGefco_V3.RaisonSocaileDest = ExtraitChaîne(sLigne,4,TAB)
    // Fin Valeur ajoutées par lecture fichier

    HAjoute(ExportGefco_V:relievedface:
    END
    FIN

    sChaineCSV est une chaîne = TableVersTexte(TABLE_ExportGefco_V3,taSansTitre,";")

    fSauveTexte(sChemin+sNomFichierExporter,sChaineCSV)
    [/windev]

    c'est pour moi le plus simple et surtout à maintenir, car il y plus de 60 valeurs avec un ordre précis en sortie, et pas forcément toutes les valeurs renseignées.

    Bonne journée à tous et merci encore !
     
    suenodesign apprécie ceci.
  • grkonan

    grkonan New Member

    Inscrit:
    Fev 23, 2018
    Messages:
    7
    J'aime reçus:
    1
    Code (Windev):
    schaine est chaine=fchargetexte("fichier.txt")
    schaine=remplace(schaine,tab,";")
    fsauvetexte("fichier.csv",schaine)
    A vous de mettre la gestion des erreurs
    ce code tient prend en compte les infos que vous avez données
    Séparateur :TAB
    Retour a la ligne : RC
     
    khaliassas apprécie ceci.
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    446
    J'aime reçus:
    142

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

    Code (Windev):
    schaine est chaine=fchargetexte("fichier.txt")
    schaine=remplace(schaine,tab,";")
    fsauvetexte("fichier.csv",schaine)
    A vous de mettre la gestion des erreurs
    ce code tient prend en compte les infos que vous avez données
    Séparateur :TAB
    Retour a la ligne : RC
    Cliquez pour agrandir...
    il va lui manquer quand meme l'ajout des infos de base :
    ExportGefco_V3.CodeTransporteur = "GEFC"
    ExportGefco_V3.CodeTrafic = "3"
    ExportGefco_V3.PortOuIncoterm = "PP"
    ExportGefco_V3.DateExpéditon = DateDuJour()
    ExportGefco_V3.RendezVousENL = "0"
    ExportGefco_V3.Cotation = "0"
    ExportGefco_V3.DIL = "0"
    ExportGefco_V3.RendeVousExpédition = "0"

    qui ne sont pas dans son fichier texte.
    Code (Windev):

    valeurdefault est chaine="GEFC;3;PP;"+datedujour()+";0;0;0;0;"
    monnouveaufichier est chaine

    schaine est chaine=fchargetexte("fichier.txt")
    pour tout chaine souschaine de schaine separee par rc
       souschaine =remplace(souschaine ,tab,";")
      monnouveaufichier +=valeurdefault+souschaine+rc
    fin

    fsauvetexte("fichier.csv",monnouveaufichier )

     
    ca marcherais ca non ?
     
    #10 khaliassas, Mar 8, 2019
    Dernière édition: Mar 8, 2019
  • visvic

    visvic Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    48
    J'aime reçus:
    24
    hello les amis,

    Oui ça fonctionnerait si l'ordre des valeurs ne devait pas être modifié. De plus mon fichier source contient 10 valeurs, mais le fichiers attendu par "GEFCO" (sociétéde transport) peut avoir jusqu'a 60 valeurs, et pour couronner le tout, ma valeur "NOM" (par exemple), peut se trouver en position 59. Il faut donc que touts les point virgule soient mis.

    Et si GEFCo venais a rajouter une valeur, grâce à ma table, la modification de l'ordre sera simplifié :)
     
  • khaliassas

    khaliassas Active Member

    Inscrit:
    Mar 4, 2019
    Messages:
    446
    J'aime reçus:
    142

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

    hello les amis,

    Oui ça fonctionnerait si l'ordre des valeurs ne devait pas être modifié. De plus mon fichier source contient 10 valeurs, mais le fichiers attendu par "GEFCO" (sociétéde transport) peut avoir jusqu'a 60 valeurs, et pour couronner le tout, ma valeur "NOM" (par exemple), peut se trouver en position 59. Il faut donc que touts les point virgule soient mis.

    Et si GEFCo venais a rajouter une valeur, grâce à ma table, la modification de l'ordre sera simplifié :)
    Cliquez pour agrandir...
    par contre il manquerais pas un tableafiche avant le tableverstext ?
     
  • visvic

    visvic Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    48
    J'aime reçus:
    24
    Hello,

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

    , pour tout avouer, je l'ai retiré à l’édition du message. Du coup j'ai testé avec et sans et les deux cas fonctionne :)
     
  • Partager cette page

    Chargement...