PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → ExtraitChaine
ExtraitChaine
Débuté par guest, 01 fév. 2006 17:27 - 6 réponses
Posté le 01 février 2006 - 17:27
Bonjour,

Je souhaite extraire des données lignes par lignes d'un fichier texte pour les implanter directement dans la base de données hyperfile. J'utilise extraitchaine().
Je n'arrive pas à extraire entierement le réel, alors que le séparateur est ";" et la séparation des entiers/décimal est ",".

Voici mon code:

//ouverture du fichier achaart.txt
indicefichier = fOuvre(repertoire_txt + "achaart.txt")

//gestion d'erreur de l'ouverture du fichier achaart.txt
SI indicefichier = -1 ALORS
Erreur("Impossible d'ouvrir le fichier achaart.txt" + RC + ErreurInfo(errMessage))
SINON
//écriture des données dans la table achaart
texte = fLitLigne(indicefichier)
TANTQUE texte <> EOT
Achaart.artref = ExtraitChaîne(texte,1,";")
Achaart.artpie = ExtraitChaîne(texte,2,";")
Achaart.artqtf = ExtraitChaîne(texte,3,";")
Achaart.artsli = ExtraitChaîne(texte,4,";")
Achaart.artes = ExtraitChaîne(texte,5,";")
Achaart.artlia = ExtraitChaîne(texte,6,";")
HAjoute(Achaart)
texte = fLitLigne(indicefichier)
FIN

Exemple:
La ligne est : 145000;008;52,30;;10/01/2006;L;

Quand j'extrais les chaines, elles me donnent ceci :
artref = 145000
artpie = 008
artqtf = 52 //la chaine ne prend que la partie entière
artsli =
artes = 10/01/2006
artlia = L

Comment je peux faire pour que artqtf = 52.30 et pas 52.
Posté le 01 février 2006 - 17:55
Quand mon champ artqtf est déclaré du type chaine, tout se passe bien,artqtf = 52.30

Quand je le déclare du type numérique(réel sur 4 octets), artqtf = 52
Posté le 01 février 2006 - 18:19
salut

je vois une soluce qui consiste à récupérer extraitchaine(texte,3,";") dans une chaine

faire un remplace(chaine,",",".") // remplacer virgule par point

et ensuite faire artqtf=chn
Posté le 01 février 2006 - 19:09
Fabien a écrit :
Quand mon champ artqtf est déclaré du type chaine, tout se passe bien,artqtf = 52.30

Quand je le déclare du type numérique(réel sur 4 octets), artqtf = 52


attention : tu importes 52,30 donc ton réel ne comprend pas la virgule.
peut-être avec :
Achaart.artqtf = val(remplace(ExtraitChaîne(texte,3,";"),",","."))

--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de spam.trepp@free.fr
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Posté le 01 février 2006 - 19:09
Achaart.artqtf = Val(ExtraitChaîne(texte,3,";"))
Posté le 02 février 2006 - 10:48
andrianne a écrit :
> Achaart.artqtf = Val(ExtraitChaîne(texte,3,";"))

non. ça renvoie 52.
aaa est une chaine = "52,30"
bbb est un reel = val(aaa)
info(bbb)
donne 52


--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de spam.trepp@free.fr
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Posté le 02 février 2006 - 11:43
Merci a tous,
la solution avec remplace(chaine,",",".") marche très bien.
Le champ table affcihe même 52,30 sans lui demander de remplacer le "." par une "," .

Bon Dev a tous