begin process at 2013 05 20 04:41:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Texte

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

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


 Information sur la source

Note :
Aucune note
Catégorie :Texte Classé sous :enregistrer, lire, fichier, texte, unicode Niveau :Débutant Date de création :27/08/2008 Date de mise à jour :28/08/2008 08:02:23 Vu :12 246

Auteur : IceTdrinker

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Ayant ramé pour trouver comment faire je vous offre cette petite source pour vous éviter de fastidieuses recherches... Pour gérer l'unicode sur une forme utilisez les contrôles de Bill Gates "Form 2.0" (FM20.DLL) voici la source pour ces contrôles : http://www.vbfrance.com/codes/UTILISER-CARACTERES- UNICODE-DANS-VB_23960.aspx

Source

  • 'Version 1.1 réalisée avec Visual Basic 6.0
  • 'Enregistrement du fichier texte au format unicode
  • Dim FF As Integer
  • FF = FreeFile 'Variable permettant de stocker un numéro de fichier libre
  • Open "C:\VotreFichier.txt" For Append As #FF
  • Print #FF, "ÿþ" 'les caractères ÿþ signale que l'on enregistre le fichier au format unicode
  • Close #FF
  • 'les caractères ÿþ n'apparaissent pas dans le fichier
  • 'un saut de ligne est automatiquement créé lors de l'enregistrement il apparait sous la forme
  • 'd'un carré
  • 'Ecrire dans un fichier texte au format unicode
  • Dim Chaine, Chaine2 As String
  • SautDeLigne = StrConv(vbCrLf, vbUnicode) 'on prépare un saut de ligne en unicode
  • Chaine = "Du texte"
  • Chaine2 = "Un autre texte"
  • 'On convertit les String en format unicode
  • Chaine = StrConv(Chaine, vbUnicode)
  • Chaine2 = StrConv(Chaine2, vbUnicode)
  • Open "C:\VotreFichier.txt" For Append As #FF
  • Print #FF, Chaine 'on écrit une String
  • Print #FF, SautDeLigne 'On saute une ligne sinon on a un fichier écrit sur une seule ligne
  • Print #FF, Chaine2 'on écrit une autre String
  • Print #FF, SautDeLigne 'et on n'oublie pas de sauter une ligne
  • Close #FF
  • 'Il devrait y avoir un carré au début de chaque ligne du fichier
  • 'Lire un fichier texte au format unicode
  • Dim inter, Chaine, Chaine2 As String
  • Open "C:\VotreFichier.txt" For Input As #FF
  • Line Input #FF, inter 'On passe les caractères ÿþ
  • Line Input #FF, inter 'On passe le saut de ligne qui est considéré comme une ligne
  • Line Input #FF, Chaine 'On récupère une ligne
  • Line Input #FF, inter 'On passe le saut de ligne qui est considéré comme une ligne
  • Line Input #FF, Chaine2 'On récupère une ligne
  • Close #FF
  • 'Si les chaines récupérées contiennent des caractères spéciaux elles seront illisibles
  • 'Il va falloir convertir uniquement les caractères spéciaux grace au code suivant
  • Chaine = Convertisseur(Chaine)
  • Chaine2 = Convertisseur(Chaine2)
  • Private Function Convertisseur(ByVal Chaine As String) As String
  • Dim Intermediaire, Intermediaire2, Intermediaire3 As String
  • For i = 1 To Len(Chaine) 'boucle pour vérifier chaque caractère
  • Intermediaire = Mid(Chaine, i, 1)
  • If IsAlpha(Intermediaire) = True Then 'vérifie si le caractère est dans la table ascii
  • Intermediaire2 = Intermediaire2 & Intermediaire 'si oui on ne convertit pas
  • Else
  • Intermediaire3 = StrConv(Intermediaire, vbFromUnicode) 'sinon on convertit depuis l'unicode ou autre selon vos besoins
  • Intermediaire2 = Intermediaire2 & Intermediaire3
  • End If
  • Next i
  • Convertisseur = Intermediaire2
  • End Function
  • Private Function IsAlpha(ByVal Caractere As String) As Boolean
  • Dim Code As Integer
  • On Error GoTo err
  • Code = Asc(Caractere) 'récupère le code ascii du caractère
  • If Code > 0 And Code < 256 Then 'si le code est compris entre 0 et 256
  • IsAlpha = True 'alors c'est un caractère ascii
  • Exit Function
  • End If
  • err:
  • IsAlpha = False 'sinon ce n'est pas le cas
  • End Function
'Version 1.1 réalisée avec Visual Basic 6.0

'Enregistrement du fichier texte au format unicode

Dim FF As Integer
FF = FreeFile 'Variable permettant de stocker un numéro de fichier libre
Open "C:\VotreFichier.txt" For Append As #FF
    Print #FF, "ÿþ" 'les caractères ÿþ signale que l'on enregistre le fichier au format unicode
Close #FF

'les caractères ÿþ n'apparaissent pas dans le fichier
'un saut de ligne est automatiquement créé lors de l'enregistrement il apparait sous la forme
'd'un carré

'Ecrire dans un fichier texte au format unicode

Dim Chaine, Chaine2 As String

SautDeLigne = StrConv(vbCrLf, vbUnicode) 'on prépare un saut de ligne en unicode
Chaine = "Du texte"
Chaine2 = "Un autre texte"
'On convertit les String en format unicode
Chaine = StrConv(Chaine, vbUnicode)
Chaine2 = StrConv(Chaine2, vbUnicode)
Open "C:\VotreFichier.txt" For Append As #FF
    Print #FF, Chaine 'on écrit une String
    Print #FF, SautDeLigne 'On saute une ligne sinon on a un fichier écrit sur une seule ligne
    Print #FF, Chaine2 'on écrit une autre String
    Print #FF, SautDeLigne 'et on n'oublie pas de sauter une ligne
Close #FF

'Il devrait y avoir un carré au début de chaque ligne du fichier

'Lire un fichier texte au format unicode

Dim inter, Chaine, Chaine2 As String
Open "C:\VotreFichier.txt" For Input As #FF
    Line Input #FF, inter 'On passe les caractères ÿþ
    Line Input #FF, inter 'On passe le saut de ligne qui est considéré comme une ligne
    Line Input #FF, Chaine 'On récupère une ligne
    Line Input #FF, inter 'On passe le saut de ligne qui est considéré comme une ligne
    Line Input #FF, Chaine2 'On récupère une ligne
Close #FF
'Si les chaines récupérées contiennent des caractères spéciaux elles seront illisibles
'Il va falloir convertir uniquement les caractères spéciaux grace au code suivant
Chaine = Convertisseur(Chaine)
Chaine2 = Convertisseur(Chaine2)

Private Function Convertisseur(ByVal Chaine As String) As String

Dim Intermediaire, Intermediaire2, Intermediaire3 As String
For i = 1 To Len(Chaine) 'boucle pour vérifier chaque caractère
    Intermediaire = Mid(Chaine, i, 1)
    If IsAlpha(Intermediaire) = True Then 'vérifie si le caractère est dans la table ascii
        Intermediaire2 = Intermediaire2 & Intermediaire 'si oui on ne convertit pas
    Else
        Intermediaire3 = StrConv(Intermediaire, vbFromUnicode) 'sinon on convertit depuis l'unicode ou autre selon vos besoins
        Intermediaire2 = Intermediaire2 & Intermediaire3
    End If
Next i
Convertisseur = Intermediaire2

End Function
Private Function IsAlpha(ByVal Caractere As String) As Boolean

Dim Code As Integer
On Error GoTo err
Code = Asc(Caractere) 'récupère le code ascii du caractère
If Code > 0 And Code < 256 Then 'si le code est compris entre 0 et 256
    IsAlpha = True 'alors c'est un caractère ascii
    Exit Function
End If
err:
IsAlpha = False 'sinon ce n'est pas le cas

End Function

 Conclusion

Voilà j'espère que cette source vous sera utile. Si vous trouve des bugs ou des erreurs faites m'en part!

Votre dévoué IceTdrinker ;)


 Historique

27 août 2008 12:02:58 :
Des caractères spéciaux s'affichaient mal, ils ont été supprimés.
28 août 2008 04:29:26 :
Je ne peux pas déclaré un saut de ligne en unicode en constante à cause de l'appel de fonction... Je chercherai pour y remédier.
28 août 2008 08:02:23 :
Utilisation de la variable FF pour les numéros de fichier implémentée automatiquement grâce à la fonction FreeFile.

 Sources de la même categorie

Source avec Zip CLAVIER TACTILE VIRTUEL par cludwig
Source avec Zip Source .NET (Dotnet) CODE BARE POUR ECRIRE DU TEXTE par alpha5
Source avec Zip Source avec une capture RECHERCHE D'UNE CHAINE DE CARACTÈRES SANS TENIR COMPTE DE L'... par 8Tnerolf8
Source avec Zip Source avec une capture Source .NET (Dotnet) BLOC-NOTES par bassoumicha
CONVERSION ASCII VERS ANSI ET VICE VERSA par mcoppa

 Sources en rapport avec celle ci

Source avec Zip [VBS] ADRESSE IP PUBLIQUE par hackoo
Source avec Zip Source .NET (Dotnet) ENREGISTREUR DE NOMS par 1234567890MOFF
ENREGISTRER par xalamar
LIRE / ECRIRE par Sloft
LIRE UN FICHIER TEXTE LIGNE PAR LIGNE ET LE METTRE DANS UN T... par Nix

Commentaires et avis

Commentaire de PCPT le 27/08/2008 13:03:50 administrateur CS

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

Commentaire de IceTdrinker le 28/08/2008 04:15:04

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!

Commentaire de PCPT le 28/08/2008 04:51:27 administrateur CS

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 ;)
++

Commentaire de PCPT le 28/08/2008 05:32:14 administrateur CS

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

Commentaire de IceTdrinker le 28/08/2008 07:55:10

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!

Commentaire de PCPT le 28/08/2008 13:32:43 administrateur CS

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

Commentaire de IceTdrinker le 29/08/2008 03:18:44

Merci pour les infos je vais y remédier mais la je suis occupé cela risque de prendre un peu de temps...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Enregistrer fichier texte Unicode [ par aurelien2723 ] Salut!Je travaille sur un fichier texte que j'ouvre avec Excel de cette manière :      appExcel.Workbooks.OpenText FileName:="source.txt", Origin:=xlW COMMENT ENREGISTRER UN FICHIER TEXTE SOUS LE FORMAT DE CODAGE UNICODE?? [ par barth707 ] Voila , j'écris dans un fichier texte et j'aimerais l'enregistrer sous un format d'encodage unicode. C à dire comme si on faisait enregistrer sous ave Lire un fichier texte mot à mot [ par akaii ] Hello,Je dois lire un fichier text et faire ressortir tous les mots pour les comparer avec deux autres mots et je n'ai pas trouvé de code équivalent, Problème fichier texte ANSI-Unicode [ par aurelien2723 ] Salut!Je fais un petit programme en VB6, sous Windows XP.J'ai un soucis avec le type d'encodage d'un fichier texte.Il me faut en sortie un fichier Uni lire un fichier texte ligne par ligne en vb.net [ par guiguidu25 ] Bonjour tout le monde je voudrais savoir comment lire un fichier texte ligne par ligne en vb.net je savais le faire pendant un moment mais j'ai oublié .Net Compact Framework Lire un Fichier Texte [ par JeffC1977 ] Bonjour....Je cherche depuis quelque heures le moyen de lire un fichier texte avec Compact Framework.J'ai trouvé du code sur MSDN mais quand je copie VB.Net Lire fichier Texte [ par JeffC1977 ] Salut...J'aimerais savoir pourquoi ca me dit que mon fichier ne peut être lu. En fait ca me dit que le fichier est peut-être utilisé et impossible à o Lecture d'une ligne de texte [ par DarkMickael ] Bonjours, je shouaiterai lire un fichier texte mais uniquement une ligne de ce texte  Explication : fichier aaa.text | contenant =&gt; aaaaa Lire fichier texte et l'exporter vers Access [ par rytta87 ] Salut, je voudrais lire un fichier texte ligne par ligne avec un delimiteur de "," et l'exporter vers une table dans une base de donnees Access. J'ai enregistrer des noms de fichier différents selon la date [ par MEEDID ] Bonjour à tous,J'ai créé un programme qui collecte des informations et les sauvegarde dans un fichier texte.Pour plus de facilité et de sécurité, j'ai


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,618 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales