Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1 2
Bonjour à tous,
J'utilise la fonction SaveAs de PowerBuilder pour enregistrer un document au format CSV. Seulement,
comme caractères de séparation il me génère des virgules, ce qui ne m'intéresse pas, car j'ai des
numériques.
Comment puis-je paramétrer le SaveAs en format CSV sans avoir besoin de me refaire une fenêtre
SaveAs personnelle gérant un format CSV ayant comme caractère de séparation le point virgule ?
Par avance, merci.
Doctor Z.
Hors ligne
Bonjour,
Hé bien c'est bizare car je me pose la même question.
Hors ligne
il me semblait que c'était dans les options régionales de windows, mais je viens de vérifier et même en ayant point-virgule comme séparateur de liste, PB exporte avec des virgules...
Hors ligne
En même temps j'ai mes options régionales en anglais, et sur mon poste PB m'affiche mes messagebox() en français ;)
Je pense que PB ne se base pas uniquement sur les options régionales.
Dernière modification par Nyphel (06-10-2008 15:39:19)
Hors ligne
Nyphel a écrit:
En même temps j'ai mes options régionales en anglais, et sur mon poste PB m'affiche mes messagebox() en français ;)
Je pense que PB ne se base pas uniquement sur les options régionales.
Tout à fait, c'est bien là mon problème.
Hors ligne
Bonjour,
Depuis la version 10 de PB, je ne sais pas si c'est votre cas, une nouvelle méthode est disponible permettant de sauvegarder un fichier en précisant le séparateur de colonne :
long dwcontrol.SaveAsFormattedText ( string filename {, string encoding {, string separatorcharacter {,string quotecharacter {, string lineending {, boolean retainnewlinechar } } } } )
Hors ligne
Je vais essayer ça tout de suite.
J'utilise ce type de bidouille mais c'est pas très satisfaisant
num = FileOpen("c:\toto.csv, LineMode!, Write!, LockWrite!, Append!) For i = 1 to ds_csv.rowcount() col1 = ds_csv.object.colonne1[i] col2 = ds_csv.object.colonne2[i] col3 = ds_csv.object.colonne3[i] chaine = col1+";"+col2+";"+col3 filewrite(num,chaine) Next fileclose(num)
Message de modération: Merci d'utiliser la balise code=pb, et non code:pb
Dernière modification par nico (07-10-2008 12:02:15)
Hors ligne
dw_pbadonf.SaveAsAscii("D:\RESULTS.TXT",";","'")
Hors ligne
pick ouic a écrit:
Code: pb
dw_pbadonf.SaveAsAscii("D:\RESULTS.TXT",";","'")
Bonjour,
Je ne connaissais pas cette instruction. Cependant, en faisant comme cela, est-ce que l'on aura la
fenêtre Windows (comme avec le SaveAs) permettant d'indiquer le chemin et le type de fichier, en
l'occurrence CSV ?
Merci.
Doctor Z.
Hors ligne
Doctor Z a écrit:
Je ne connaissais pas cette instruction. Cependant, en faisant comme cela, est-ce que l'on aura la
fenêtre Windows (comme avec le SaveAs) permettant d'indiquer le chemin et le type de fichier, en
l'occurrence CSV ?
Non, le SaveAsAscii nécessite obligatoirement un chemin d'accès de fichier valide en paramètre. Tu n'auras pas la possibilité d'afficher la fenêtre window comme cela. De même, le fichier sauvegardé sera de type texte avec comme séparateur un ";" (il ne me semble pas que les fichiers d'extension .CSV soient autorisés avec cette méthode, mais c'est à tester).
Ceci n'est cependant pas forcément gênant (Un import dans Excel du fichier généré se fera sans problème par exemple).
Pour faire apparaître la fenêtre de sélection de l'emplacement du fichier, il te faudra coder cet appel toi-même, et récupérer le chemin dans une variable de type string que tu pourras passer en paramètre à la méthode "SaveAsAscii".
Hors ligne
oui il te suffira de coder d'abord un GetFileSaveName pour que l'utilisateur choisisse le chemin et le nom de fichier
Hors ligne
Merci pour vos réponses.
C'est tout de même dommage que dans PB, il n'y ait pas la possibilité de choisir le caractère de
séparation pour un format CSV et dommage, je suis en PB9, je ne peux donc pas utiliser le
SaveAsFormatedText proposé par Buck.
Juste un apparté: nico, tu peux optimiser ton code, car tu réévalues à chaque fois ds_csv.rowcount(),
en faisant cela, ton code est plus optimisé :
ll_rowcount = ds_csv.rowcount() For i = 1 to ll_rowcount ...
Hors ligne
à toi Doctor Z
Hors ligne
Bonjour à tous,
Pour info je suis sur PowerBuilder 9.
En complément de ce sujet j'ai plusieurs questions.
1° Comment récupérer le chemin sélectionner par l'utilisateur lorsque l'on utilise le SaveAs ? Par une
API ? Par une méthode PB ? Dans la base de registre ? Autre ?
2° Comment faire pour avoir l'explorateur de Windows dans une datawindow ? J'ai regardé du côté
des OLE mais je n'ai rien trouvé. Quelqu'un a-t-il une idée ?
Par avance, merci.
Doctor Z.
Hors ligne
erasorz a écrit:
oui il te suffira de coder d'abord un GetFileSaveName pour que l'utilisateur choisisse le chemin et le nom de fichier
Hors ligne
String ls_path, ls_file //L'utilisateur choisi le nom et chemin du fichier .csv GetFileSaveName("Sauvegarde du fichier Pro",ls_path,ls_file,"csv","CSV (*.csv),*.csv") FileDelete(ls_path) dw_pbadonf.SaveAsAscii(ls_path,";","'")
Hors ligne
nico a écrit:
Code: pb
String ls_path, ls_file //L'utilisateur choisi le nom et chemin du fichier .csv GetFileSaveName("Sauvegarde du fichier Pro",ls_path,ls_file,"csv","CSV (*.csv),*.csv") FileDelete(ls_path) dw_pbadonf.SaveAsAscii(ls_path,";","'")
Bonjour à tous,
Autant pour moi, j'ai lu trop rapidement vos réponses
Effectivement, le GetFileSaveName m'apporte ce dont j'ai besoin, cependant, je ne voudrai pas
limiter les extensions de fichier à la seule CSV. L'utilisateur doit pouvoir choisir toute une panoplie
d'extension et si effectivement il choisi le CSV, je dois le traiter pour remplacer le caractère de
séparation.
C'est pour cela aussi que je posai les questions de mon précédent poste.
Je continue de chercher et de tester, si je trouve quelque chose je vous en ferai part.
PS1 : Je n'utilise pas non plus les PFC ni aucun framework.
PS2 : J'imagine bien que le nom et le répertoire du fichier enregistrer qu'il soit CSV ou autre, est
stocké quelque part dans la base de registre, simplement je n'ai pas accès que je n'en ai pas les
droits
Merci.
Doctor Z.
Hors ligne
Après quelques recherche, j'ai trouvé 2 trucs intéressants : le GetCurrentDirectory () et la fonction
GetModuleFileName de l'API Windows.
Le GetCurrentDirectory () ne me donne que le répertoire de sauvegarde, qui plus est, il peut varier
durant l'ouverture de l'application et n'est donc pas très fiable. Il se pourrait que mon salut vienne de
l'utilisation de GetModuleFileName car il me permet de tout récupérer, le problème est que je dois
compiler mon appli pour qu'il fonctionne correctement, le cas échéant, il me retourne le répertoire où
se trouve PB installé, c'est un peu contraignant, mais il me semble que je n'ai pas trop le choix.
Question complémentaire : comment faire pour, dans une datawindow avoir un explorateur Windows ?
Par avance, merci.
Hors ligne
Personne ne peux me donner un petit coup de main pour la petite question supplémentaire ?
Hors ligne
J'ai développé cette petite fenêtre pour sélectionner un répertoire dans mon application :
Est-ce type de fonctionnalités que tu recherches ? si oui, je peux éventuellement mettre le code à disposition.
Hors ligne
buck a écrit:
J'ai développé cette petite fenêtre pour sélectionner un répertoire dans mon application :
[img align=L]http://bucaille.chez-alice.fr/pbadonf/explorateur.jpg[/url]
Est-ce type de fonctionnalités que tu recherches ? si oui, je peux éventuellement mettre le code à disposition.
Merci pour ta réponse, mais je ne peux pas visualiser la fenêtre en question et toutes les pistes que
je puisse avoir m'intéresse car je suis coincé au niveau du SaveAs pour lequel mon appli doit ouvrir
la fenêtre de sauvegarde et proposer un certain nombre d'extenseion (pas comme le GetFileSaveName).
Quand au GetModuleFileName après analyse, il ne me permet de récupérer que le répertoire d'installation
de l'appli, ce qui ne m'intéresse pas ici.
Merci.
Hors ligne
Bonjour,
La fonction GetFileSaveName supporte parfaitement plusieurs extensions :
GetFileSaveName ( "Select File", ls_path, ls_file, "GIF", "GIF (*.gif), *.gif, JPEG (*.jpg), *.jpg" , "C:\My Documents", 32770)
Dans l'option filter (5 ème paramètres optionnels de GetFileSaveName) , il suffit d'ajouter autant d'extension que l'on souhaite en respectant la syntaxe ci-dessus.
Hors ligne
buck a écrit:
Bonjour,
La fonction GetFileSaveName supporte parfaitement plusieurs extensions :Code: pb
GetFileSaveName ( "Select File", ls_path, ls_file, "GIF", "GIF (*.gif), *.gif, JPEG (*.jpg), *.jpg" , "C:\My Documents", 32770)
Dans l'option filter (5 ème paramètres optionnels de GetFileSaveName) , il suffit d'ajouter autant d'extension que l'on souhaite en respectant la syntaxe ci-dessus.
Bonjour,buck, je ne connais pas à l'avance ls_path et ls_file, c'est l'utilisateur qui va les choisir par le biais de Pour l'histoire des extensions, la question est
la boîte de dialogue et c'est bien là mon problème.
entendu, merci.
OK, ça fonctionne, maintenant cette méthode fonctionne-t-elle avec les datawindows ? Je n'en ai pas
l'impression ...
Hors ligne
Doctor Z a écrit:
...buck, je ne connais pas à l'avance ls_path et ls_file, c'est l'utilisateur qui va les choisir par le biais de la boîte de dialogue et c'est bien là mon problème...
C'est toujours le cas quand on utilise GetFileSaveName
Doctor, je viens de tout relire, pourtant je ne comprends pas quel est ton problème.
Hors ligne
shahin a écrit:
Doctor Z a écrit:
...buck, je ne connais pas à l'avance ls_path et ls_file, c'est l'utilisateur qui va les choisir par le biais de la boîte de dialogue et c'est bien là mon problème...
C'est toujours le cas quand on utilise GetFileSaveName
Doctor, je viens de tout relire, pourtant je ne comprends pas quel est ton problème.
Résumons.
- j'ai une datawindow
- je dois pouvoir sauvegarder celle-ci dans plusieurs formats, y compris le CSV
- si je l'enregistre en CSV, je veux pouvoir modifier le caractère séparateur (par le biais du SaveAsAscii
ça fonctionne bien)
- le SaveAs ne me permet pas de récupérer le chemin et le nom de fichier choisi par l'utilisateur
- le GetFileSaveName (sauf erreur de ma part) ne permet pas de travailler avec une datawindow, mais
me permet de récupérer le chemin et le nom du fichier
Comment puis-je faire ? Il me faudrait un mélange de SaveAs () et de GetFileSaveName ().
Hors ligne
Pages: 1 2