Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Powerscripts
  •  » [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

#26 20-10-2008 16:31:42

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Bonjour,

Un petit exemple sera le plus parlant :

Code: pb

string ls_pathname, ls_file

IF GetFileSaveName ( "Select File", ls_pathname, ls_file, "GIF",  "XLS (*.xls), *.gif, CSV (*.csv), *.csv" , "C:\My Documents",  32770) = 1 THEN
  
  CHOOSE CASE right(ls_pathname,4)
    CASE '.csv'
      dw_1.SaveAsAscii(ls_pathname, ';')
    CASE '.xls'
      dw_1.SaveAs(ls_pathname, Excel8!, FALSE, EncodingANSI!)  
  END CHOOSE
  
END IF

Hors ligne

 

#27 20-10-2008 21:17:45

Steph  
crazy gamer
Lieu: Paris
Date d'inscription: 08-09-2006
Messages: 154
Pépites: 99,825
Banque: 11,934,987,430,796,550

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Salut les gens, ça faisait un moment :D
Ce forum est bloqué où je travaille

Bref. Moi, j'ai un problème avec le saveasascii.

J'ai une datastore toute bête qui récupère les données d'une table que je veux enregistrer dans un fichier csv avec ; comme séparateur.
Jusque là, pas de souci, ça fonctionne bien.

En revanche, pour une raison que j'ignore, ca ne prend pas en compte les chiffres à virgule.
Du coup, au lieu d'avoir 154,52 dans mon fichier, j'ai 15452.

Pour le moment, je contourne le problème en lisant ligne par ligne ma table et concaténer chaque champ avec un ; puis j'écris dans le fichier texte.
Ca fonctionne bien, mais bon, ça aurait été plus simple avec la datastore.

Voilà, si quelqu'un à une idée du pourquoi du comment ;)

Merci

Hors ligne

 

#28 21-10-2008 07:17:27

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Salut Steph,

ton séparateur décimal est bien "," ?

Code: pb

SQLCA.DBParm = "DecimalSeparator=','"


Tu peux également vérifier les paramètres régionaux à la rubrique "Symbole décimal"

Lorsque tu fais ton retrieve() sous PB, tes données sont 'elles affichées correctement?

Hors ligne

 

#29 21-10-2008 07:20:09

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Salut Doctor Z,

Si tes formats de sauvegarde sont prédéfinis, je pense que la méthode de Buck te résoudra tes problèmes.

Hors ligne

 

#30 21-10-2008 08:17:56

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Bonjour à tous,

Merci beaucoup pour votre aide. La méthode de buck fonctionne effectivement très bien. Cependant,
je suis en train de chercher comment faire la distinction entre :

- un fichier Excel au format Excel
- un fichier Excel au format Excel avec les entêtes
- un fichier Excel au format Excel5
- un fichier Excel au format Excel5 avec les entêtes
...

Tous ont une extension XLS.

Le SaveAs () me permet effectivement de faire la distinction de l'extension sélectionnée (Excel!,
Excel5!, Excel8!, ...) mais aussi de spécifier s'il est nécessaire d'intégrer un entête (par le biais du 3e
paramètre du SaveAs (), True ou False).

Lorsque je trouverai quelque chose, je vous ferai signe, en tout merci beaucoup pour votre aide et
votre disponibilité.

Doctor Z.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#31 21-10-2008 08:47:28

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

J'ai imaginé une manière de faire : gérer des formats à l'affichage et gérer des formats en interne de
manière à ce que je puisse faire la distinction entre la version et le type.

Je fais mon test et je vous dis ce qu'il en ait.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#32 21-10-2008 10:05:19

nico  
Modérateur
Award: bf
Lieu: Plélan le grand
Date d'inscription: 08-02-2007
Messages: 273
Pépites: 13
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Ne pourrais tu pas laisser l'utilisateur choisir son format (avec une DDLB par exemple)?
Dans ta DDLB, tu pourrais avoir :

- Excel
- Excel avec entêtes
- Excel5
- Excel5 avec entêtes
- CSV
- XML ...

et coder ton Saveas() sous un bouton en gérant ta sauvegarde en fonction du choix sélectionné.

Hors ligne

 

#33 21-10-2008 11:51:55

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

nico a écrit:

Ne pourrais tu pas laisser l'utilisateur choisir son format (avec une DDLB par exemple)?
Dans ta DDLB, tu pourrais avoir :

- Excel
- Excel avec entêtes
- Excel5
- Excel5 avec entêtes
- CSV
- XML ...

et coder ton Saveas() sous un bouton en gérant ta sauvegarde en fonction du choix sélectionné.

Salut nico,

En faisant comme cela, ça m'oblige à me créer une fenêtre de sauvegarde : en effet, le GetFileSaveName
m'ouvre une fenêtre de sauvegarde, puis après je travaille avec un SaveAs () ou un SaveAsAsii ()
suivant le cas.

De ce fait, il me faudrait une fenêtre qui reproduise à l'identique la fenêtre Windows "Enregistrer sous".


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#34 21-10-2008 16:22:59

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Je reviens vers vous pour vous donner des nouvelles.

Le scénario que j'avais imaginer concernant la gestion d'extension interne et d'extension à lister dans
la fenêtre de sauvegarde fonctionne d'après mes tests.

Voilà mon code (il n'est pas optimisé, mais je suis encore en cours de développement et de tests) :

Code: pb

integer    li_rc
string    ls_pathname, ls_file, ls_pathname_final
string    ls_excel0 = "*.xls0n", ls_excel0_h = "*.xls0h", ls_excel5 = "*.xls5n", ls_excel5_h = "*.xls5h", ls_excel8 = "*.xls8n", ls_excel8_h = "*.xls8h"
string    ls_csv0 = "*.csv0n", ls_csv0_h = "*.csv0h"
datastore  lds_csv_import


// Construction de la fenêtre "Enregistrer sous" avec les différentes extension à supporter
IF GetFileSaveName ( "Save file as", ls_pathname, ls_file,  "Excel", &
                                        "CSV, " + ls_csv0 + ",CSV with headers," + ls_csv0_h + &
                                        ",Excel, " + ls_excel0 + ",Excel with headers," + ls_excel0_h + &
                                        ",Excel5, " + ls_excel5 + ",Excel5 with headers," + ls_excel5_h + &
                                        ",Excel8 (97 / 2000 / XP / 2003), " + ls_excel8 + ",Excel8 (97 / 2000 / XP / 2003) with headers, " + ls_excel8_h, &
                                        "",  32770) = 1 THEN

  // Mémoriser le path correcte sans prendre en compte l'extension interne de travail
  ls_pathname_final = Left (ls_pathname, Len (ls_pathname) - 2)
  
  // En fonction de l'extension choisie, faire la sauvegarde correspondante
  CHOOSE CASE Right (ls_pathname, 5)
      
    // CSV sans entêtes
    CASE "csv0n"
      uo_dw_generic.SaveAs (ls_pathname_final, CSV!, FALSE)
      
      // Création et initialisation de la datastore
      lds_csv_import = CREATE Datastore
      lds_csv_import.DataObject = "d_import_n"
      
      // Importer le fichier sauvegardé dans une datastore
      li_rc = lds_csv_import.ImportFile (ls_pathname_final)
      IF li_rc < 0 OR IsNull (li_rc) THEN
        MessageBox ("ERREUR", "Erreur lors de l'importation des données du fichier CSV sans entêtes !", StopSign!, OK!)
      ELSE
        lds_csv_import.SaveAsAscii (ls_pathname_final, ";", "")
      END IF
      
      // Destruction de la datastore
      DESTROY lds_csv_import
      
    // CSV avec entêtes
    CASE "csv0h"
      uo_dw_generic.SaveAs (ls_pathname_final, CSV!, TRUE)
      
      // Création et initialisation de la datastore
      lds_csv_import = CREATE Datastore
      lds_csv_import.DataObject = "d_import_h"
      
      // Importer le fichier sauvegardé dans une datastore
      li_rc = lds_csv_import.ImportFile (ls_pathname_final)
      IF li_rc < 0 OR IsNull (li_rc) THEN
        MessageBox ("ERREUR", "Erreur lors de l'importation des données du fichier CSV avec entêtes !", StopSign!, OK!)
      ELSE
        lds_csv_import.SaveAsAscii (ls_pathname_final, ";", "")
      END IF
      
      // Destruction de la datastore
      DESTROY lds_csv_import

    // Excel sans entêtes
    CASE "xls0n"
      uo_dw_generic.SaveAs (ls_pathname_final, Excel!, FALSE)
    
    // Excel avec entêtes
    CASE "xls0h"
      uo_dw_generic.SaveAs (ls_pathname_final, Excel!, TRUE)
      
    // Excel 5 sans entêtes
    CASE "xls5n"
      uo_dw_generic.SaveAs (ls_pathname_final, Excel5!, FALSE)
      
    // Excel 5 avec entêtes
    CASE "xls5h"
      uo_dw_generic.SaveAs (ls_pathname_final, Excel5!, TRUE)
...
END CHOOSE


Les cas simples (tous les cas sauf les CSV) sont faciles à gérer. Pour le CSV sans entêtes cela fonctionne aussi très
bien, simplement, je ne comprend pas pourquoi l'importation de mon fichier CSV avec entêtes échoue, je me prend
un -4, soit un Invalid input d'après la fiche d'aide de la méthode ImportFile ().

J'ai même fait 2 dataobject différents, mais rien à faire, toujours la même erreur. Si quelqu'un a une idée, moi
entre temps je continue de chercher et de tester.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#35 22-10-2008 09:46:14

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Bonjour,

Le code de retour -4 de la méthode ImportFile () était lié au fait que comme j'importe un fichier
contenant un entête, cette dernière n'arrivait pas à l'interprêter.

En faisant un :

Code: pb

li_rc = lds_csv_import.ImportFile (ls_pathname_final, 2)


cela fonctionne, il fallait commencer à la deuxière ligne pour que l'importation fonctionne.

En tout cas merci à tous d'avoir eut la patience de m'aider.

Doctor Z.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#36 24-10-2008 17:51:18

Steph  
crazy gamer
Lieu: Paris
Date d'inscription: 08-09-2006
Messages: 154
Pépites: 99,825
Banque: 11,934,987,430,796,550

Re: [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

nico a écrit:

Salut Steph,

ton séparateur décimal est bien "," ?

Code: pb

SQLCA.DBParm = "DecimalSeparator=','"


Tu peux également vérifier les paramètres régionaux à la rubrique "Symbole décimal"

Lorsque tu fais ton retrieve() sous PB, tes données sont 'elles affichées correctement?

J'avais bien mis le DecimalSeparator mais j'avais une simple quote mal placée. C'est maintenant résolu ;)
Merci

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » [RESOLU] Enregistrer en CSV avec comme caractère de séparation le point virgule

Pied de page des forums

Propulsé par FluxBB 1.2.22