| |
Membre enregistré 125 messages |
|
Posté le 04 juillet 2024 - 15:28 |
Bonjour,
je créée un fichier csv et écrit dedans avec le code suivant:
NomCheminFichier = sCheminDonnées + "/VersPC/PATIENTPC_" + NumériqueVersChaîne(fichierA.IDVISITE) + ".csv" IDFichier = fOuvre(NomCheminFichier, foAjout) ResEcrit = fEcritLigne(IDFichier, fichierA.IDVISITE + ";" + fichierA.IDOPERAT + ";" + fichierA.IDPATIENT) ResFermeFichier = fFerme(IDFichier)
Je transfère ensuite le fichier en FTP sur un serveur et lorsque je le récupère en local: UnFichier = GlNomRepPROG +"\VersPC\PATIENTPC_*.csv" IDFichier = fOuvre(UnFichier, foLectureEcriture) WLigne = fChargeTexte(UnFichier)
Mon contenu est: 1<0>6<0>3<0>7<0>;<0>P<0>H<0>I<0>L<0>I<0>P<0>P<0>E<0>
Au lieu de 1637; PHILIPPE
Quelqu'un sait m'expliquer pourquoi ?
Merci
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 097 messages |
|
Posté le 04 juillet 2024 - 16:56 |
Bonjour, C'est typique de l'UNICODE
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 125 messages |
|
Posté le 05 juillet 2024 - 09:05 |
Bonjour Voroltinquo,
merci pour ta réponse.
En fait, je dois transférer un fichier csv depuis une tablette (WM) vers Windev.
Depuis ma tablette je fais: WResu est une chaine Unicode WResu = "2" + ";" + "PHILIPPE"
Et lorsque je récupère le fichier du côté de Windev, je fais: WLigne est une chaine IDFichier = fOuvre(UnFichier, foLectureEcriture) Wligne = fChargeTexte(UnFichier)
Mais WLigne contient : 2<0>;<0>P<0>H<0>I<0>L<0>I<0>P<0>P<0>E<0>
Je fais quoi de faux ?
Merci pour ton aide.
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 434 messages |
|
Posté le 05 juillet 2024 - 09:31 |
Bonjour,
Il est dommage de ne pas avoir pris en compte l'indice de Voroltinquo, pour effectuer une recherche dans la documentation sur la manipulation de chaînes UNICODE.
Vous écrivez une chaine UNICODE sur votre tablette. Il faut donc la récupérer dans une chaîne UNICODE sur WinDev. Pour cela, plusieurs possibilités : soit déclarer tout le projet en UNICODE via la description de la configuration du projet, soit déclarer votre WLigne comme une chaîne UNICODE. Sinon utiliser la fonction UnicodeVersAnsi(). |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 125 messages |
|
Posté le 05 juillet 2024 - 09:37 |
Bonjour bchanudet,
j'avais bien tenu compte de la remarque de Voroltinquo, mais je viens de réessayer avec ce code du coté de Windev:
WResU est une chaîne Unicode WResU = fChargeTexte(UnFichier)
Et j'ai toujours le même problème.
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 676 messages |
|
Posté le 05 juillet 2024 - 09:50 |
Bonjour,
Plutôt que de traiter le fichier en Unicode, il est préférable de la coder en UTF 8. Ton code devient:
WResu est une chaîne = ChaîneVersUTF8 ("2" + ";" + "PHILIPPE")
WLigne est une chaîne IDFichier = fOuvre(UnFichier, foLectureEcriture) Wligne = UTF8VersChaîne(fChargeTexte(UnFichier))
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 125 messages |
|
Posté le 05 juillet 2024 - 10:29 |
Je viens de faire exactement ça, et j'ai toujours le même problème:
Côté tablette : WREsu est une chaine WResU = ChaîneVersUTF8("2" + ";" + "PHILIPPE")
Côté Windev : IDFichier = fOuvre(UnFichier, foLectureEcriture) WLigne = UTF8VersChaîne(fChargeTexte(UnFichier))
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 434 messages |
|
Posté le 05 juillet 2024 - 10:43 |
Avez-vous essayé cela :
WResU est une chaîne UNICODE WResU = fChargeTexte(UnFichier, foUnicode)
La documentation de fChargeTexte() propose aussi de passer par un buffer :
MonBuffer est un Buffer MonBuffer = fChargeTexte("C:\MesFichiers\MonFichier.XML") MaChaîne est une chaîne UNICODE MaChaîne = MonBuffer Info(MaChaîne)
Message modifié, 05 juillet 2024 - 10:45 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 125 messages |
|
Posté le 05 juillet 2024 - 10:48 |
Toujours le même soucis
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 125 messages |
|
Posté le 05 juillet 2024 - 10:52 |
Bonne nouvelle !!!!!
Alors je viens de tester la deuxième partie de code: MonBuffer est un Buffer MonBuffer = fChargeTexte(UnFichier) MaChaîne est une chaîne Unicode MaChaîne = MonBuffer
Dans MonBuffer, j'ai les <0> et dès que je charge MaChaine, j'ai les bons caractères !!!
Merci beaucoup et excellente journée.
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 125 messages |
|
Posté le 05 juillet 2024 - 13:32 |
Je vous sollicite encore dans ce post, car j'ai un autre problème de traitement sur cette chaîne Unicode.
Après avoir récupéré mon contenu de mon fichier csv, je n'arrive pas à lire mon fichier HFSQL avec la clé. Mon exemple:
Wligne contient "2;PHILIPPE"
WLigne est une chaine Unicode WID est une chaîne WID = ExtraitChaîne(WLigne,1,";")
et WID contient alors "?2"
Je dois mettre le contenu dans une chaine normale, car je dois lire mon fichier avec HLitRecherchePremier(MonFichier,UniqueKey,[CodSoc,WID])
et si fais cette commande avec une variable de type Unicode (le contenu sera bien = "2"), le record n'est pas trouvé.
Merci pour votre aide.
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 81 messages |
|
Posté le 05 juillet 2024 - 16:41 |
Salut,
et si; maintenant que tu as une chaine UNICODE qui va bien, pourquoi tu ne la transfères pas dans une chaine ANSI avec la fonction UnicodeVersAnsi ? Il y a plein de fonctions qui permettent de passer d'un encodage à un autre, fais un petit tour dans l'aide.
Autre Remarque, tu aurais pu charger le contenu du fichier avec le paramètre "foUnicode" de sMonContenu = fChargeTexte(sMonFichier,foUnicode)
Eric |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 125 messages |
|
Posté le 05 juillet 2024 - 18:42 |
Bonjour et merci Eric !
alors finalement cette solution fonctionne : WLigne est une chaîne Unicode WIDPatient est une chaîne Unicode WLigne = fChargeTexte(UnFichier, foUnicode) WIDPatient = ExtraitChaîne(WLigne,1,";")
Mais pour info, ce code ci-dessous ne fonctionnait pas:
MonBuffer est un Buffer WLigne est une chaîne Unicode WChaine est une chaîne MonBuffer = fChargeTexte(UnFichier) WLigne = MonBuffer //Contenu = "2;PHILIPPE" WChaine = UnicodeVersAnsi(WLigne) //Contenu WChaine = "?2;PHILIPPE"
Donc selon moi, impossible de bien récupérer dans une variable de type chaine tout court (même après conversion avec UnicodeVersAnsi.
-- Cordialement
Philippe T. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 676 messages |
|
Posté le 08 juillet 2024 - 08:09 |
Juste pour info, L'unicode n'est pas traité de la même manière selon les plateformes. Le seul encodage commun à toutes les plateformes est l'UTF8.
Il est donc préférable de trouver la solution avec de l'UTF8 et non de l'Unicode. Tu risques de rencontrer des problèmes avec d'autres fonctions, notamment si tu veux chiffrer une chaîne d'un côté et la déchiffrer sur une autre plateforme.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |