Soyez le premier à donner votre avis sur cette source.
Snippet vu 15 949 fois - Téléchargée 16 fois
'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
.... & 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
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!
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
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 ;)
++
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.