Lecture fichier texte UTF-8

Lecture fichier texte UTF-8 - VB/VBA/VBS - Programmation

Marsh Posté le 07-08-2006 à 12:27:15    

En résumé, voici mon problème :  
 
Avec VBA Access, je dois lire (puis traiter) une série de fichiers texte au format UNICODE UTF-8.  Et VBA Access semble les lire comme des formats UTF-7, ce qui rend le texte difficilement lisible (tous les signes accentués sont transformés).
 
Après la méthode classique de l'Open, j'ai essayé avec OpenAsTextStream, mais ça ne change rien, quelque soit la valeur du Tristate (-2,-1 ou 0). Je ne sais pas comment spécifier que le fichier est en UTF-8.
 
Plus précisément :
 
J'ai par exemple une fichier TEMP1.txt qui contient cette ligne de texte :
 

Citation :

Au-delà des génétiquement modifiés


 
J'ai commencé à lire ce texte avec cette méthode :
 

Code :
  1. Open "C\...\TEMP1.txt" For Input As #1
  2. Line Input #1, TextArticle
  3. Debug.Print TextArticle
  4. Close #1


 
Voila ce que ça donne :
 

Citation :

Au-delÃ* des génétiquement modifiés


 
J'ai donc essayé avec cette méthode :
 

Code :
  1. Set objFSO = New Scripting.FileSystemObject
  2. Set objFile = objFSO.GetFile("C:\...\TEMP1.txt" )
  3. Set objtextstream = objFile.OpenAsTextStream(ForReading, TristateTrue)
  4. Debug.Print objtextstream.ReadLine


 
Mais ça ne change rien!
 
Je sais aussi qu'il y a bien une méthode avec ADODB qui marche :
 

Code :
  1. Set strm = CreateObject("adodb.stream" )
  2. With strm
  3. .Charset = "utf-8"
  4. .Type = 2
  5. .Open
  6. .LoadFromFile "C:\...\TEMP1.txt"
  7. t = .ReadText
  8. Debug.Print t
  9. .Close
  10. End With


 
Mais le problème est que je dois lire le fichier ligne par ligne, ce qui est impossible avec cette méthode.
 
J'ai également cru comprendre sur Internet qu'il existe une manière de spécifier le format avec cette instruction :
 

Code :
  1. objFile.Charset = "UTF-8"


 
Mais VB Access me répond que cette méthode n'est pas gérées par cet objet (erreur 438).
 
Une dernière chose : vu le nombre et la taille des fichier, leur simple conversion (avec Word par exemple) n'est pas envisageable.
 
Je suis donc bien embêté, et vous serai très reconnaissant de me tirer de ce mauvais pas!
 
Bien cordialement,
 
EL

Reply

Marsh Posté le 07-08-2006 à 12:27:15   

Reply

Marsh Posté le 07-08-2006 à 12:29:34    

Tu as essayé avec TransfertText?

Reply

Marsh Posté le 07-08-2006 à 12:30:00    

oups TransferText pour être exact

Reply

Marsh Posté le 07-08-2006 à 12:38:42    

Non, en effet, je vais voir ce que ça donne.

Reply

Marsh Posté le 07-08-2006 à 12:42:31    

A vrai dire, je crois que je pourrais convertir les fichiers UTF-8 en fichiers plus lisible en les important dans une table sous ce format (je suis sur VBA Access), puis en les exportant sous un autre. Mais je trouve que cette solution est un peu lourdingue. N'y a-t-il donc pas un moyen de faire connaître à VBA le format précis du fichier au moment de sa lecture ligne par ligne?

Reply

Marsh Posté le 07-08-2006 à 12:48:32    

TransferText importe ligne par ligne dans une table, ce n'est pas ce que tu veux? tu veux traiter les lignes à la volée sans les stocker?

Reply

Marsh Posté le 07-08-2006 à 13:01:51    

Eh Oui!
En plus, je me méfie un peu des méthodes d'importation de VBA Access, pour avoir eu quelques mauvaises surprises. Sur des fichiers relativement léger tout se passe bien, mais dès que le fichier est plus lourd (quelques dizaines de milliers de lignes), alors on découvre, mais toujours un peu tard, que des blocs de lignes ont été intervertis! Or dans le cas présent l'ordre est important. Et je dois de toute façon traiter les lignes à la volée.
 
Si tu as une idée...
 
PS : je dois décoller du bureau maintenant, je ne répondrai donc pas dans les heures qui suivent. Mais je lirai avec attention tous vos conseils ce soir! Merci d'avance!

Reply

Marsh Posté le 07-08-2006 à 14:48:45    

Désolé, j'ai cherché, j'ai pas d'autres idées...

Reply

Marsh Posté le 07-08-2006 à 16:23:14    

je suis aussi de ton avis kika93, je me sers de cette méthode pour travailler avec des données sources au format .txt et cela fonctionne très bien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed