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







Bonjour,
Je dois importer un fichier .txt avec comme séparateur des ; (points virgules) comme séparateur.
La fonction Importfile ne supporte pas ce séparateur.
J'ai regardé sur le site, mais je ne trouve pas la solution à mon problème.
Et même si j'importe le fichier dans une grande zone, après comment je peux faire pour récupérer les différentes zones afin de restructurer mon fichier ?
Merci d'avance
Hors ligne







Salut,
Pour le problème des ";" je pense que ça avait déjà été traité dans un autre sujet, faudra juste le retrouver.
Par contre pour le découpage je vois un truc dans le genre :
long ll_premier_point_virgule long ll_deuxieme_point_virgule string ls_chaine_extraite long ll_nombre_de_caracteres //Pour chaque ligne du fichier (je te laisse coder cette partie) ll_premier_point_virgule = 1 ll_deuxieme_point_virgule = 1 // Tant que on a pas atteint la fin de la ligne DO WHILE ll_deuxieme_point_virgule <> 0 // On sauvegarde l'emplacement du premier point virgule ll_premier_point_virgule = ll_deuxieme_point_virgule ll_deuxieme_point_virgule = Pos(ls_ligne, ";", ll_premier_point_virgule) If ( ll_deuxieme_point_virgule = 0) Then ls_chaine_extraite = Mid(ls_ligne, ll_premier_point_virgule + 1) Else //Sinon on extrait jusqu'au prochain ";" ll_nombre_de_caracteres = ll_deuxieme_point_virgule - ll_premier_point_virgule ls_chaine_extraite = Mid(ls_ligne, ll_premier_point_virgule + 1, ll_nombre_de_caracteres - 1) End If LOOP
Hors ligne







Mais oui mais c'est bien sur,
C'est tout à fait ce qu'il me fallait, et en plus ça marche.
Merci beaucoup
Hors ligne







De rien mais si d'autres savent si il existe une fonction pb native qui ferait la même chose que "split" en java le code serait encore plus court :
Dernière modification par Nephtis (10-11-2008 18:02:16)
Hors ligne














native non, mais ça prend pas longtemps d'écrire une petite fonction lnv_fn.of_string_to_tab( as_chaine, as_separateur, ref as_tab[] )
Hors ligne







Je me permets de faire remonter le sujet car j'ai créé cette fonction mais elle me fait planter mon application 
Voila le code source de la fonction (format export) :
$PBExportHeader$f_string_to_tab.srf global type f_string_to_tab from function_object end type forward prototypes global subroutine f_string_to_tab (string as_chaine, string as_separateur, ref string as_tab[]) end prototypes global subroutine f_string_to_tab (string as_chaine, string as_separateur, ref string as_tab[]); Long ll_premier_separateur Long ll_deuxieme_separateur Long ll_nombre_de_caracteres Long ll_taille_tableau String ls_chaine_extraite ll_premier_separateur = 1 ll_deuxieme_separateur = 1 // On initialise la taille du tableau ll_taille_tableau = 0 // Tant qu'on a pas atteinds la fin de la ligne DO WHILE ll_deuxieme_separateur <> 0 ll_premier_separateur = ll_deuxieme_separateur //Recherche du prochain separateur ll_deuxieme_separateur = Pos(as_chaine, as_separateur, ll_premier_separateur + 1) If (ll_deuxieme_separateur = 0) Then ls_chaine_extraite = Mid(as_chaine, ll_premier_separateur + 1) Else ll_nombre_de_caracteres = ll_deuxieme_separateur - ll_premier_separateur If (ll_premier_separateur = 1) Then // Si on commence le balayage alors il faut prendre le premier caractere ls_chaine_extraite = Mid(as_chaine, ll_premier_separateur, ll_nombre_de_caracteres) Else ls_chaine_extraite = Mid(as_chaine, ll_premier_separateur + 1, ll_nombre_de_caracteres - 1) End If End If ll_taille_tableau = ll_taille_tableau + 1 as_tab[ll_taille_tableau] = ls_chaine_extraite LOOP end subroutine
Est ce que quelqu'un pourrait tester chez lui?
Au départ j'avais oublié de déclarer le tableau en "référence" (cela ne plantait pas mais je ne récupérait pas mes données) puis j'ai recréé la fonction en déclarant le tableau en "référence" (et c'est là que ça plante)
J'appelle la fonction de cette façon :
f_string_to_tab(ls_Line_Input, ";", ls_ligne_ad[])
Hors ligne














l'appel c'est sans les crochets :
f_string_to_tab(ls_Line_Input, ";", ls_ligne_ad)
Hors ligne







erasorz a écrit:
l'appel c'est sans les crochets :
Code: pb
f_string_to_tab(ls_Line_Input, ";", ls_ligne_ad)
C'était bien ça
Dernière modification par Nephtis (14-11-2008 12:00:19)
Hors ligne
Pages: 1