Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour a tous,
Version PB12.5
Problème : je dois faire des importfile d'un fichier csv dans une datawindow et j'ai comme séparateur ";", et PB n'aime pas trop, il préfère les tabulations.
Savez vous comment remplacer des ";" en tabulation dans un fichier , et que ce soit transparent pour l'utilisateur ? qu'il n'ait pas de manips à faire..
Merci
Hors ligne
Quand j'ai eu à le faire (en PB classic mais ça doit pas trop être différent pour ton cas), je me suis fait une fonction d'import maison avec les fonction openFile, fileRead et je gérait le séparateur ";" manuellement.
Le fileOpen était en linemode, tu lis ta ligne par le fileRead, tu découpe ta ligne à chaque ";" en insérant dans les colonne successive de ta DW.
Et un petit coup de file close en fin de fonction et le tour est joué.
Hors ligne
ok merci, c'est bien ce qu'il me semblait devoir faire.
Mais c'était au cas ou il y ait une fonction plus "automatisée".
Hors ligne
De mémoire il y avais un soucis avec cette histoire de ;
Après il y avait un autre soucis qui était le fait que l'on risquais d'avoir un nombre de colonne différent de ce que l'on attendait et l'ordre des colonnes pouvant changer ça permettait de remettre tout en ordre directement à l'import.
Hors ligne
Van a écrit:
Le fileOpen était en linemode, tu lis ta ligne par le fileRead, tu découpe ta ligne à chaque ";" en insérant dans les colonne successive de ta DW.
.
Fais le plutôt en TextMode!, ça évitera de boucler sur les lignes : tu récupères tout le texte d'un coup. Un truc du genre :
String ls_text Long ll_file ll_file = FileOpen( "ton_fichier", TextMode! ) If ll_file <> -1 And Not IsNull( ll_file ) Then FileReadEx( ll_file, ls_text ) ls_text = gf_replace_all( ls_text, ";", "~t" ) dw_1.ImportString( Text!, ls_text ) End If
NB : il faut juste avoir la fonction qui fait le "replace all".
EDIT : et être sûr qu'il n'y a pas de ; dans tes champs
Hors ligne
ok, impec merci à tous !
Hors ligne
erasorz a écrit:
NB : il faut juste avoir la fonction qui fait le "replace all".
EDIT : et être sûr qu'il n'y a pas de ; dans tes champs
Pour ça si le fichier est bien contruit quand le séparateur est présnet dans une donnée il doit y avoir un encadrement par des guillemets de la donnée.
Si ça peux arriver dans ce cas il faut que tu fasse un remplace en fonction du fait que la donnée n'est pas incluse entre guillemets, ce qui te fait plus de code à écrire.
Et pour le coup avec le replace que tu propose erasorz il faut que tu sois sûr aussi qu'il n'y a pas de données contiennant du text avec des tabulations, auquel cas ça découperai en une colonne supplémentaire à tord.
Dernière modification par Van (17-02-2015 08:44:57)
Hors ligne