ENREGISTRER LIRE ET MODIFIER/ÉCRIRE DANS UN FICHIER TEXTE AU FORMAT UNICODE

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 27 août 2008 à 13:03
 Utilisateur anonyme - 29 août 2008 à 03:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47772-enregistrer-lire-et-modifier-ecrire-dans-un-fichier-texte-au-format-unicode

Utilisateur anonyme
29 août 2008 à 03:18
Merci pour les infos je vais y remédier mais la je suis occupé cela risque de prendre un peu de temps...
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 août 2008 à 13:32
petite erreur dans mon code :
.... & vbCrLf
(pas besoin du strconv)

et par contre si on veut le "format" unicode partout (représenté visuellement sous notepad par des espaces), on l'utilisera.
çà donnne par exemple :
abChars = StrConv("Du texte", vbUnicode) & vbCrLf

là alors on a bien tout le fichier en unicode

par contre je ne comprends pas ce que tu veux dire par "jolis carrés illisibles", je crois que tu confonds le codage et l'affichage SELON LA TYPO

http://www.cijoint.fr/cj200808/cijyrvnvGM.jpg

un fichier unicode DOIT se lire et s'écrire en binaire
Utilisateur anonyme
28 août 2008 à 07:55
Merci pour l'info sur chrW!
Le convertisseur en fait c'est pour pouvoir afficher les caractères correctement au lieu d'avoir des surprises du type caractères chinois (ça m'est arrivé) ou d'avoir de jolis carrés illisibles pout tout humain normalement constitué :)
Pour FreeFile je connais mais je tire ce code d'un programme à moi qui ne peut pas avoir plus d'un fichier ouvert en même temps, mais je vais modifier ça pour des raisons de praticité (ça se dit?). Pour ton exemple mon problème est que je ne suis pas initié aux accès fichier en type binaire... Je vais chercher et peut-être que je ferai 2 exemples un en accès "classique" et un autre en accès binaire. Et pour les suites aucun problème je suis ouvert à toute critique constructive!
A+ et merci!
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 août 2008 à 05:32
petit exemple avec du texte 'normal' et de l'unicode.
le fichier est bien reconnu de type unicode

Private Sub Command1_Click()
Dim FF As Integer, abChars() As Byte

' num fichier
FF = FreeFile

' ouverture binaire
Open "C:\VotreFichier.txt" For Binary Access Write As #FF

' header ReDim abChars(1): abChars(0) &HFF: abChars(1) &HFE
Put #FF, , abChars

' ligne 1 - ANSI
abChars = "Du texte" & vbCrLf
Put #FF, , abChars

' ligne 2 - UNICODE
abChars = ChrW$(&H3088) & ChrW$(&H3046) & ChrW$(&H3053) & ChrW$(&H305D) & StrConv(vbCrLf, vbUnicode)
Put #FF, , abChars

' ligne 3 - ANSI
abChars = "Un autre texte"
Put #FF, , abChars

' fermeture
Close #FF
Erase abChars
End Sub
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
28 août 2008 à 04:51
ta source est réactivée

chrW => (MSDN)
Les nombres compris entre 0 et 31 sont identiques aux codes standard ASCII non imprimables.
Toutefois, sur des systèmes DBCS, la valeur de l'argument charcode peut être comprise entre -32768 et 65535.

convertisseur, tu parles d'affichage ou de format de stockage des caractères?

# n'est pas indispensable dans l'absolu mais c'est une question de cohérence syntaxique simplement. de même tu devrais passer par une variable et non un chiffre (1) en dur ; variable implémentée par la fonction FreeFile

en attente des suites si possible ;)
++
Utilisateur anonyme
28 août 2008 à 04:15
Pourquoi avoir désactivé ma source? je n'ai pas eu le temps de répondre hier... laissez un délai un peu plus long SVP
Sinon

*la fonction chrW est bien sympa mais elle n'est pas pratique lorsque l'on veut enregistrer des chaines de caractères puisqu'elle ne fait que générer un caractère à partir d'un code compris entre 0 et 256 un peu comme la fonction Chr simple

*ma fonction 'Convertisseur' permet d'éviter d'avoir des idéogrammes chinois lorsque les caractères sont convertis sans se poser de questions avec StrConv à partir de l'unicode

*effectivement pour IsAlpha j'ai fais une belle gaffe, j'utilise asc par préférence.

*Pour SautDeLigne c'est une erreur de ma part, Chaine et Chaine2 sont en fait les variables que l'on souhaite enregistrer dans le fichier

*le # n'est pas utile dans ma version de VB il ne plante pas. mais je peux le rajouter si celà te semble utile.

et puis je teste avec un fichier texte unicode puisque les caractères ÿþ font que le fichier s'enregistre au format unicode donc voilà je vais modifier les erreurs et j'espère que ma source sera débloquée!
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 août 2008 à 13:03
salut,

peux tu expliquer ton code et surtout tes choix?

*écrire des caractères unicode => il faut utiliser la fonction chrW

*ta fonction 'Convertisseur' => la fonction StrConv avec le bon argument s'en charge

*ta fonction 'IsAlpha' => pas besoin de tester toutes les valeurs en boucle, si <255 suffit. et idem, ascW existe aussi

*Dim SautDeLigne, Chaine, Chaine2 As String
SautDeLigne et Chaine sont alors des VARIANT

*manque un # au numéro d'ouverture de fichier

peux-tu expliquer un peu tout çà, là je ne vois pas au final ce que tu voulais faire. qui plus est comme tu ne testes pas avec un vrai fichier unicode...

merci
Rejoignez-nous