comment lire un txt qui n'a pas de retour chariot ?

comment lire un txt qui n'a pas de retour chariot ? - VB/VBA/VBS - Programmation

Marsh Posté le 07-12-2010 à 21:04:00    

Bonjour tout le monde
 
J'essaye de réalisé une macro en VBA, mais j'ai un problème que j'arrive pas à résoudre.
 
je souhaiterai récupérer des information dans un fichier xml. Jusque ici, je n'ai pas de difficulté, le fichier s'ouvre comme un fichier txt, le problème provient du fichier il n'a pas de retour chariot! J'arrive donc à lire la première ligne dans string qui contient 1024 caractères mais ensuite sa plante.
 
Je voulais savoir si vous avec une solution ?
 
je pense qu'il faut l'ouvrir en binaire et parcourir le fichier jusqu'a un caractère donné. c possible ?
 
Merci pour votre Aide j'en ai un grand besoin !
 
Le débutant

Reply

Marsh Posté le 07-12-2010 à 21:04:00   

Reply

Marsh Posté le 08-12-2010 à 11:15:02    

Habituellement, un fichier XML contient des retour chariot. C'est bizarre qu'il n'en ait pas. Peut-être qu'il viendrait d'Unix et aurait été transféré en mode binaire au lieu d'avoir été transféré en mode ascii. Peut-être que le problème pourrait se régler à ce niveau.
 
Sinon, une solution consiste  ouvrir le fichier en mode binaire et à utiliser Get (mais je ne sais pas si marche avec toutes les versions de VBA).
Voir http://vbautomation.110mb.com/VBA/ [...] lBasic.htm

Reply

Marsh Posté le 09-12-2010 à 09:52:19    

un fichier XML ne peux contenir aucun retour chariot selon les modes de génération.
 
et ce n'est pas prévu pour être lu comme un fichier texte de base :D
 
Y a pas le contexte de programation dans le poste de départ, donc je peux pas vraiment aider completement :
Mais en gros il faut utiliser la librairie (dans les références) de microsoft MSXML (y a plusieurs version)
 
et parser le fichier pour accéder a ses éléments.
 
 

Reply

Marsh Posté le 09-12-2010 à 19:43:11    

Bonjour, me revoilà !
 
j'ai réussi en mode binaire. Voici la version de base du code !
 
a = 1
Dim nFileNum As Integer, sMyString As String
nFileNum = FreeFile
 
Open "dede.XML" For Binary As nFileNum
Do While Not EOF(1)
    sMyString = Space(500)
    Get #nFileNum, a, sMyString
    a = a + 1
         
    MyPos = InStr(sMyString, " Date=" )
    If MyPos = 1 Then GoTo line1
     
    MyPos = InStr(sMyString, "Modification=" )
    If MyPos = 1 Then GoTo line2
retour:    
Loop
Close nFileNum
 
line1:
line2:
 
 
Merci pour votre aide  

Reply

Marsh Posté le 10-12-2010 à 10:22:03    

Super, et merci pour le retour, cela aidera d'autres personnes pour la lecture en mode binaire sous VB qui est peu connue.

Reply

Marsh Posté le 16-12-2010 à 21:41:55    

En essayant de lire un de mes fichiers sous Notepad++, la lecture par ligne peut se faire normalement mais pas sous le bloc-notes, où là tout le fichier est lu d'un coup, et donne donc un texte inexploitable. Je ne sais pas si ce cas correspond au votre mais dans le doute, voici une méthode perso :

Code :
  1. ; ouvre fichier pour le lire
  2. Open Adresse_file For Input As #1
  3. ; ouvre fichier temporaire pour conversion
  4. Open Adresse_file & ".tmp" For Output As #2
  5. ; la boucle de conversion commence
  6. While Not EOF(1)
  7. ; lit la ligne
  8. Input #1, Valeur_ligne
  9. ; convertit le retour chariot simple en vrai retour à la ligne
  10. Print #2, Replace(Valeur_ligne, Chr(10), Chr(13) & Chr(10))
  11. ; fin de boucle
  12. Wend
  13. ; fermer fichiers
  14. Reset
  15. ; fichier exploitable pouvant être lu ligne par ligne = fichier temporaire


Message édité par Ju2fruits le 16-12-2010 à 21:58:18

---------------
Steam id
Reply

Sujets relatifs:

Leave a Replay

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