Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1028 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Lecture fichier TXT caractère parasite ° →

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Lecture fichier TXT caractère parasite ° →

n°2296605
daniel-12
Posté le 18-02-2017 à 16:53:56  profilanswer
 

bonjour
j'ai fais un macro qui permet de lire le contenu d'un fichier texte et qui en extrait certaines infos
cela fonctionne bien, la macro me convient parfaitement
en moins de 15s je lit des fichiers de 1 000 000 lignes et le résultat est 10 fois moins lourd
bref parfait, enfin presque !
 
 
certains fichiers textes contiennent un caractère parasite
il ressemble a cela  →
il correspond à degré, ou °
il provient d'extracts que j'ai fait via SAP=>TXT
 
le problème que j'ai,  c'est que la macro considère ce caractère comme ...fin de l'histoire
 
jugez par vous même
 

Code :
  1. Private Sub CommandButton1_Click()
  2. Dim inputdata As String
  3. Dim separateur As String
  4. Dim n As Single
  5. Open ActiveDocument.Path & "testbug.txt" For Input As #1
  6. Do While Not EOF(1)
  7.     Line Input #1, inputdata
  8. MsgBox inputdata
  9. Loop
  10. Close #1
  11. 'contenu du fichier texte  testbug.txt
  12. '|00|000|SAPGEC      |OF|DECORATION EXT-OA1                      |18.06.2003|      |
  13. '|00|000|SAPGEC      |OF|DECORATION EXT-OA2                      |26.12.2000|      |
  14. '|00|000|SAPGEC      |OF|DECORATION EXT-OA3                      |18.06.2003|      |
  15. '|00|000|SAPGEC      |VL|DECORATION EXT-OA4                      |26.12.2000|      |
  16. '|00|000|SAPGEC      |OF|DECORATION EXT-OA5                      |18.06.2003|      |
  17. '|00|000|SAPGEC      |OF|ANGLE BRAQUAGE 90                      |18.06.2003|      |         edit, normalement il y a → derrière 90
  18. '|00|000|SAPGEC      |OF|ANGLE BRAQUAGE 90                      |26.12.2000|      |
  19. 'etc....
  20. End Sub


logiquement avec ce code les 7 ligne devraient être lu
dans la réalité, avec ce caractère, la dernière et les suivante seront ignorées
car après 90→  la macro sort


Message édité par daniel-12 le 18-02-2017 à 17:17:03
mood
Publicité
Posté le 18-02-2017 à 16:53:56  profilanswer
 

n°2296606
daniel-12
Posté le 18-02-2017 à 17:00:09  profilanswer
 

ben voila !
sur TXT il apparait
en VBA, il reste visible
en passant sur le forum, il disparait  :o  
 
le voila quand même :D  
http://nsa38.casimages.com/img/2017/02/18/mini_170218051721670711.jpg
 
 
question :
comme faire pour que ce caractère spécial ne me fasse pas sortir de la macro ?
 
si vous lancez le code fourni, vous verrez (si le caractère est présent) que des qu'on arrive a ce caractère, la boucle se termine sans lire les ligne desous


Message édité par daniel-12 le 18-02-2017 à 17:00:51
n°2296608
kiki29
Posté le 19-02-2017 à 06:30:13  profilanswer
 

Salut, voir http://silkyroad.developpez.com/VB [...] aracteres/ avec Clean qui supprime les caractères non imprimables ?


---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
n°2296610
daniel-12
Posté le 19-02-2017 à 11:17:08  profilanswer
 

je suis allé voir
mais cela semble fonctionner pour excel
 
Cell.Value = Application.WorksheetFunction.Clean(Cell.Value)
 
je ne travaille que avec du TXT
 
j'ai bien essayé avec la fonction REPLACE, mais je n'y arrive pas
j'ai l'impression que cette petite flêche est considéré comme la fin du fichier

n°2296611
daniel-12
Posté le 19-02-2017 à 12:22:44  profilanswer
 

je viens de tester une autre solution, avec du VBS
http://wiki.dane.ac-versailles.fr/ [...] hier_texte
 
j'ai donc remplacé les caractères accentués su lien par  
-une fleche
-un °
 
j'ai enregistré le VBS, et le l'ai lancé
et après verif du VBS , vola ce que je trouve
 
cette satanée flêche s'est transformée en ?
 
    accents = "?"
    pas_accents = "°"
 
 

n°2296618
Marc L
Posté le 19-02-2017 à 16:33:09  profilanswer
 

 
            Bonjour,
 
            rien qu'avec un éditeur en hexadécimal pour voir le code du caractère
            ou encore en VB / VBA / VBS avec la fonction ASC pour lire son code
            bref, ce n'est vraiment pas compliqué de l'effacer via la fonction Replace …
 
            Et comme ce n'est pas un caractère parasite mais faisant bel et bien partie de la source,
            ce serait tellement plus judicieux d'intervenir côté SAP afin de produire une extraction propre !
 

n°2296619
Marc L
Posté le 19-02-2017 à 16:38:02  profilanswer
 

 
            Et si c'est juste une question d'encodage de caractères, donc encore une fois ce n'est pas un caractère parasite,
            utiliser par exemple ADODB.Stream (cf documentation sur MSDN) pour effectuer la lecture du fichier texte
            en spécifiant le bon encodage source.   Qui plus est cet objet est bien plus rapide en lecture / écriture de fichier !
 

n°2296644
daniel-12
Posté le 20-02-2017 à 22:16:17  profilanswer
 

bonsoir
je sais bien qu'il serait judicieux de ne pas avoir ce caractère quand le fais l'extract sous SAP, mais je n'ai pas trouvé de solution via SAP
 
pour info, notepad++ affiche SUB  à la place de ce caractère
il semblerai aussi qu'il soit reconnu comme chr(26)
 
aujourd'hui la solution la plus simple que j'ai trouvé fonctionne
j'edite avec notepad le fichier TXT
je cherche ce caractère, puis le remplace
 
 
ADODB.Stream, je ne connais pas, je ne vais pas me lancer la dessus
je suis quand confiant qu'il y a un moyen de dire a VBA de supprimer, convertir, ou ignorer ce caractère
 
 
 
 

n°2296650
rat de com​bat
attention rongeur méchant!
Posté le 21-02-2017 à 00:21:45  profilanswer
 

Citation :

aujourd'hui la solution la plus simple que j'ai trouvé fonctionne
j'edite avec notepad le fichier TXT
je cherche ce caractère, puis le remplace


Si c'est ça la méthode retenu ça peut s'automatiser. L'outil Linux "sed" existe aussi pour Windows, c'est un petit exécutable de 50kB qu'on peut appeller depuis un batch avec les arguments qui vont bien: https://en.wikipedia.org/wiki/Sed#Substitution_command

 

edit: En supposant qu'il existe une commande system() ou autre en VBA on peut automatiser encore plus. Bien sûr c'est pas propre, mais si ça fait l'affaire...


Message édité par rat de combat le 21-02-2017 à 00:23:23
n°2296651
Marc L
Posté le 21-02-2017 à 00:34:14  profilanswer
 

 
            Ce caractère existe-t-il bien côté SAP ou pas ?   Dans le sens y-a-t-il bien un caractère après 90 ?
 
            Aucun souci en VBA pour supprimer un caractère via la fonction  Replace  par exemple.
            Si le fichier était accessible, je pourrais facilement me faire une idée …
             
            ADODB.Stream étant bien plus rapide, facile en prendre en main, suffit de lire sa doc sur MSDN.
 

mood
Publicité
Posté le 21-02-2017 à 00:34:14  profilanswer
 

n°2296655
daniel-12
Posté le 21-02-2017 à 09:04:37  profilanswer
 

attention
je ne suis pas un administrateur sous SAP, juste un simple utilisateur
le caractère y est, je pense, je confirme ce soir
 
l'extract je le fais manuellement (en maintenant en vbscript) puis j'enregistre la liste obtenu
 
ce soir je vous posterai un apercu du fichier

n°2296683
daniel-12
Posté le 21-02-2017 à 20:55:15  profilanswer
 

j'ai mis un apercu du fichier dans le ZIP
Fichier : http://www.partage-fichiers.com/upload/wy7hwgnq
 
Utilisateur : p75cgpj3
Mot de passe : kvp1c1c6

n°2296685
Marc L
Posté le 22-02-2017 à 00:09:47  profilanswer
 

 
            Comme d'hab' encore une exportation de SAP un peu pourrie, au prix du logiciel et du gars chargé de son exploitation !
            Un problème de paramétrage certainement à revoir car si c'est bien le caractère du degré ° présent dans la base
            c'est franchement anormal de générer à la place le caractère standard de fin de fichier ‼
 
            Voici une démonstration réalisant une lecture ligne à ligne en utilisant l'objet Stream plus rapide,
            le caractère étant corrigé au passage, l'affichage est effectué dans la fenêtre Exécution du VBE :
 

Code :
  1. Sub Demo()
  2.               TXT$ = ActiveDocument.Path & "\bug.txt"
  3.        If Dir(TXT) = "" Then Beep: Exit Sub
  4.                 C$ = Chr$(26)
  5.    With CreateObject("ADODB.Stream" )
  6.                 .Charset = "windows-1252"
  7.                 .Open
  8.                 .LoadFromFile TXT
  9.        Do Until .EOS
  10.            Debug.Print Replace$(.ReadText(-2), C, "°" )
  11.        Loop
  12.                 .Close
  13.    End With
  14. End Sub


            Comme documenté sur MSDN cet objet peut aussi effectuer une lecture complète du fichier en mémoire en une passe
            permettant d'extraire le nécessaire via la fonction VBA  Split  …
 

n°2296735
daniel-12
Posté le 22-02-2017 à 23:57:56  profilanswer
 

ok,  
merci pour ce morceau de code
je vais essayer de l'adapter à mes besoins
 
pour ce qui est de l'extract avec des caractère farfelus, il faut savoir que ces données ont été mainte en mainte fois copiées, déplacées
certaines datent de 30ans, d'autre de 30j
les avoir toutes sur le même extract avec seulement ce soucis, je m'en accommoderai

n°2296751
Marc L
Posté le 23-02-2017 à 11:35:18  profilanswer
 

 
            Peu importe, le paramétrage d'extraction doit être corrigé si ce n'est la base elle-même …
 

n°2297001
TotalRecal​l
Posté le 01-03-2017 à 10:30:53  profilanswer
 

Hello,
Ce n'est pas forcément que ta flèche (ou n'importe quel autre caractère étendu) est interprété comme un EOF.
Renvoyer EOF est aussi la façon que certaines API de lecture de fichiers mal branlées ont de te dire "erreur de lecture".

 

Je vais peut être dire une grosse bêtise parce que je ne fais pas de macro, mais plutôt qu'utiliser "Open" tu ne pourrais pas utiliser un Scripting.FileSystemObject et lui spécifier l'encoding ?
Ca permettrait de mieux gérer les caractères spéciaux. Avec un peu de chance il sera lu "tel quel" plutôt que fermer le flux, à défaut d'être lu comme un °.

 

edit : un truc comme ça si tu y as accès : http://stackoverflow.com/a/10997824/461444

Message cité 1 fois
Message édité par TotalRecall le 01-03-2017 à 10:31:37

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2297003
Marc L
Posté le 01-03-2017 à 11:19:25  profilanswer
 

 
            Stream étant plus rapide que FSO et vu le nombre de lignes …
 

n°2297005
TotalRecal​l
Posté le 01-03-2017 à 11:32:23  profilanswer
 

A tester. Un truc un peu plus lent c'est mieux qu'un autre plus rapide qui plante...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2297029
Marc L
Posté le 01-03-2017 à 14:48:31  profilanswer
 

 
            L'utilisant depuis des années il ne plante pas - sinon je n'aurais pas proposé le code plus haut ! - et il a plus de possibilités que FSO …
 

n°2297030
TotalRecal​l
Posté le 01-03-2017 à 14:55:19  profilanswer
 

Il ne plante pas mais il renvoie un EOF pour un caractère qui n'est pas un EOF [:orly2]


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2297032
TotalRecal​l
Posté le 01-03-2017 à 14:57:50  profilanswer
 
n°2297051
daniel-12
Posté le 01-03-2017 à 21:28:39  profilanswer
 

Ne vous inquietez pas cela m'ira
 
cela semble fonctionner, il me faut juste l'adapter pour mon programme
Pour le moment, je fait à la méthode ....débutant
j'ouvre avec notepad, je cherche la satanée flêche, puis la remplace dans le document complet
Mais je suis au courant du problème et je connais une solution rapide
 
mais si je dois laisser quelqu'un d'autre utiliser le programme, il me faudra le fiabiliser, et je sais maintenant comment  
 

n°2297052
daniel-12
Posté le 01-03-2017 à 21:32:01  profilanswer
 

Total recall, je l'avais vu cette page wiki
et j'avais bien identifié le problème et traduit comme cela sur mon premier post
"le problème que j'ai,  c'est que la macro considère ce caractère comme ...fin de l'histoire"
 
mon soucis était de le contourner  
 
et oui, sur wiki ils disent:
Some programming languages (e.g. Visual Basic) will not read past a "soft" EOF when using the built-in text file reading primitives (INPUT, LINE INPUT etc.), and alternate methods must be adopted, e.g. opening the file in binary mode or using the File System Object to progress beyond it.
 
le soucis c'est que je suis un débutant en tout !
et FSO je n'avais jamais utilisé
 
Merci en tout cas pour votre aide  :jap:


Message édité par daniel-12 le 01-03-2017 à 21:33:40
n°2297067
Marc L
Posté le 02-03-2017 à 01:32:05  profilanswer
 

 
            FSO donne exactement le même résultat qu'avec Stream vu le fichier texte source
            comme aurait dû le constater TotalRecall avec un éditeur hexadécimal ‼
 
            Mon idée initiale était de rester en pur VBA avec une lecture en mode binaire
            mais comme tu as indiqué un million de lignes j'ai préféré t'orienter vers Stream au lieu de FSO
            sans compter la finalité non précisée …
 
            Mais si tu préfères rester dans la banalité / généralité en utilisant FSO, aucun souci
            et comme pour Stream sa documentation est consultable sur MSDN et à la portée d'un débutant.
 

n°2297069
Marc L
Posté le 02-03-2017 à 01:41:46  profilanswer
 

TotalRecall a écrit :

Il ne plante pas mais il renvoie un EOF pour un caractère qui n'est pas un EOF


             T'as vu jouer cela où ?   :??:    Et sans tester, bravo !   Il n'y a plus qu'à s'incliner devant une telle science infuse ‼   :jap:  
 
             Stream et FSO renvoient exactement le même résultat et  
             ce n'est pourtant pas compliqué à vérifier, premier point à effectuer avant de poster une quelconque assertion …  :sarcastic:
 

n°2297072
TotalRecal​l
Posté le 02-03-2017 à 09:26:55  profilanswer
 

Marc L a écrit :


             T'as vu jouer cela où ?   :??:    Et sans tester, bravo !   Il n'y a plus qu'à s'incliner devant une telle science infuse ‼   :jap:

 

            Stream et FSO renvoient exactement le même résultat et
             ce n'est pourtant pas compliqué à vérifier, premier point à effectuer avant de poster une quelconque assertion …  :sarcastic:
 


Bonjour,
En plus d'avoir ta barre espace coincée dans chacun de tes posts, si tu as vu dans ce message une quelconque affirmation péremptoire il semble que tu aies aussi des problèmes de lecture.

 

daniel-12 arrive avec un souci de lecture où la fonction qu'il utilise ne sait pas interpréter un caractère et du coup interrompt complètement la lecture (c'est lui qui le dit) et du coup je lui suggère de tester une méthode alternative qui pourrait être exempte de ce problème. Ca ne me parait pas complètement déconnant comme approche, à défaut de pouvoir éviter la présence de ce caractère (ou d'autres qui produiraient la même anomalie) dans le flux à charger. Peut être effectivement que ça aurait produit la même anomalie, et je n'ai pas fait l'essai, j'ai juste dit que c'était à envisager vu que c'est rapide à faire.


Message édité par TotalRecall le 02-03-2017 à 09:28:33

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2297078
Marc L
Posté le 02-03-2017 à 11:13:13  profilanswer
 

 
             Péremptoire ?‼   :lol:   Balaie devant ta porte !

TotalRecall a écrit :

mais plutôt qu'utiliser "Open" tu ne pourrais pas utiliser un Scripting.FileSystemObject et lui spécifier l'encoding ?
Ca permettrait de mieux gérer les caractères spéciaux. Avec un peu de chance il sera lu "tel quel" plutôt que fermer le flux, à défaut d'être lu comme un °.


             Ici pas trop mais un peu quand même, la seconde assertion étant fausse, le fichier texte n'ayant même pas été ouvert !
             Car une fois pour toute, le fichier ne contient pas le caractère ° mais bien → !   Et en cas de problème d'encodage
             il y aurait des soucis sur d'autres caractères vu le fichier en exemple, il suffit juste de l'ouvrir !
 
             Au passage si le fichier est encodé en utf-8 par exemple, comment « spécifier l'encoding » à FSO ?
             Eclaire donc ma pauvre p'tite lanterne !
 
 

TotalRecall a écrit :

A tester. Un truc un peu plus lent c'est mieux qu'un autre plus rapide qui plante...


             Là totalement péremptoire car toujours sans tester affirmant Stream plantant alors que cela fonctionne du côté du demandeur et du mien !
             Et si tu tentes de te rattraper en affirmant que tu ne parlais pas de Stream, juste en relisant le fil pourtant,
             il faudrait alors à l'avenir bien préciser ta pensée pour éviter de pouvoir mal interpréter tes dires !
 
 

TotalRecall a écrit :

Il ne plante pas mais il renvoie un EOF pour un caractère qui n'est pas un EOF [:orly2]


             Du péremptoire au plus haut degré !  Un léger mieux car il ne plante plus mais renvoyant un caractère pour un autre,
             là encore on voit que le fichier texte n'a même pas été ouvert !
 
             Pour moi c'est clos, j'attends juste un exemple FSO pour l'encoding, merci …
 
            _______________________________________________________________________________________________________________
 
              Deux choses sont infinies : l’Univers et la bêtise humaine.
              Mais en ce qui concerne l’Univers, je n’en ai pas encore acquis la certitude absolue ! (Albert Einstein)
 

n°2297079
TotalRecal​l
Posté le 02-03-2017 à 11:31:34  profilanswer
 

Tu le fais exprès ou quoi ? Si tu ouvres un fichier de 1 million de lignes et que ton API, quelle qu'elle soit, s'arrête de lire dès qu'elle rencontre un caractère qui ne lui plait pas, tu ne penses pas qu'on peut considérer ça comme une anomalie et suggérer des méthodes alternatives ?
 
Maintenant moi j'ai fini de te parler, tu peux remballer tes citations recyclées à toutes les sauces et attendre ce que tu veux aussi longtemps que tu voudras.  


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2297080
Marc L
Posté le 02-03-2017 à 11:58:51  profilanswer
 

 
             Mais de quelle API parles-tu enfin ?‼
 
             C'est bien facile d'affirmer un truc et de se barrer en courant dès que l'on te demande une explication digne de ce nom ‼
 

n°2297128
rat de com​bat
attention rongeur méchant!
Posté le 02-03-2017 à 20:27:00  profilanswer
 

Désolé Marc L, je ne mettrai pas en doutes tes compétences en VBA mais sur ce coup là je te trouve bien arrogant, surtout vu la citation d'Einstein que tu as posté. :o  N'oublie pas que tu parles à un membre ayant 41363 messages sur ce forum et qui a dû aider pleins de gens, pas à un nouveau inscrit qui veut qu'on fasse son boulot et qui devient aggressif parce qu'on lui renvoye le reglèment ou quelque chose comme ça! Si TotalRecall se trompe (j'en sais rien) alors on peut en discuter tranquillement et avec des arguments (notamment un exemple de code).
 
Bon, je me mêle d'histoires qui ne me regardent pas mais sur ce coup là je n'ai pas pu m'en empêcher.

n°2297141
Marc L
Posté le 02-03-2017 à 23:44:42  profilanswer
 

 
            Ayant de mon côté déjà posté un exemple de code et pour le reste j'ai été clair, n'ayant rien vu de concret en retour …
 

n°2297480
Modération
Posté le 09-03-2017 à 14:05:08  answer
 

[:bonux]

n°2300276
daniel-12
Posté le 05-05-2017 à 22:17:24  profilanswer
 

Code :
  1. Sub Demo()
  2.     T = Timer
  3.                    TXT$ = ActiveDocument.Path & "bug.txt"
  4.                  
  5.             If Dir(TXT) = "" Then Beep: Exit Sub
  6.                      C$ = Chr$(26)
  7.                    
  8.        Open ActiveDocument.Path & "resultat.txt" For Output As #1
  9.         With CreateObject("ADODB.Stream";)
  10.                      .Charset = "windows-1252"
  11.                      .Open
  12.                      .LoadFromFile TXT
  13.             Do Until .EOS
  14.            
  15.             SC = Replace$(.ReadText(-2), C, "°";)  'string corrigée, caractère fleche chr26 remplacé par °
  16.          
  17.                 If Mid(SC, 15, 1) = " " Then
  18.                 Print #1, Mid(SC, 6, 9) & "%" & Mid(SC, 55, 40)
  19.              
  20.                 End If
  21.             Loop
  22.                      .Close
  23.         End With
  24.         Close #1
  25.     Debug.Print "Demo1 : "; Format(Timer - T, "0.000s";)
  26.        
  27.     End Sub


Bonsoir
Marc, j'ai utilisé ton code pour enlever le caractère parasite, mais j'ai un soucis
c'est long
 
par exemple, si je traite un fichier de 1 500 000 lignes, je mettais 45s pour le traiter (sous reserve d'avoir edité le caractère avant)
avec le code posté, qui édite le caractère, et traite ensuite le fichier, je mets 290s
 
ou est ce que je peux améliorer le code
les lignes sont faite comme cela
 
|PLA|F00010021                |00|000|SAPGEC      |OF|ENS GEOMETRIES ST2                      |18.06.2003|      |
|PLA|F00010021-H00            |00|000|SAPEXPL     |OF|ENS GEOMETRIES ST2                      |09.06.2003|      |
|PLA|F00010021_001            |00|000|SAPGEC      |OF|ENS GEOMETRIES ST2                      |18.06.2003|      |
|PLA|F00010021_001_H00        |00|000|SAPEXPL     |OF|ENS GEOMETRIES ST2                      |09.06.2003|      |
 
ce que je veux extraire c'est=> F00010021%ENS GEOMETRIES ST2


Message édité par daniel-12 le 05-05-2017 à 22:23:10
n°2300293
Marc L
Posté le 06-05-2017 à 09:31:00  profilanswer
 

 
           Bonjour,
 
           voir déjà en utilisant l'objet Stream aussi pour l'écriture du fichier comme dans ton autre discussion …


Message édité par Marc L le 06-05-2017 à 09:31:14
n°2300294
Marc L
Posté le 06-05-2017 à 09:51:43  profilanswer
 

 
           Sans pouvoir tester avec un fichier réel, je me demande si
           ce serait plus rapide d'effectuer directement un rechercher / remplacer dans Notepad++ …
 

n°2300295
daniel-12
Posté le 06-05-2017 à 09:57:12  profilanswer
 

c'est ce que je fait actuellement !
le soucis c'est qu'il me faut penser à le faire

n°2300296
Marc L
Posté le 06-05-2017 à 09:59:10  profilanswer
 

 
           Et on aimerait bien voir aussi le code original ne mettant que 45 secondes …

Message cité 1 fois
Message édité par Marc L le 06-05-2017 à 10:00:05
n°2300297
Marc L
Posté le 06-05-2017 à 10:38:42  profilanswer
 

 
           Au cas où, sait-on jamais …   (VBA Excel)
 

Code :
  1. Sub Demo2()
  2.        Dim oStr(1) As Object, C$, F, T!, N%, SP$(), S9 As String * 9
  3.        C = ThisWorkbook.Path & "\"
  4.        F = Array(C & "bug.txt", C & "result.txt" )
  5.        If Dir(F(0)) = "" Then Beep: Exit Sub
  6.        T = Timer
  7.        C = Chr$(26)
  8.    For N = 0 To 1
  9.        Set oStr(N) = CreateObject("ADODB.Stream" )
  10.            oStr(N).Charset = "x-ansi"
  11.            oStr(N).Open
  12.    Next
  13.            oStr(0).LoadFromFile F(0)
  14.   Do Until oStr(0).EOS
  15.            SP = Split(oStr(0).ReadText(-2), "|" )
  16.            S9 = SP(2)
  17.            oStr(1).WriteText S9 & "%" & Replace$(SP(7), C, "°" ), 1
  18.   Loop
  19.            oStr(1).SaveToFile F(1), 2
  20.    For N = 0 To 1
  21.            oStr(N).Close
  22.        Set oStr(N) = Nothing
  23.    Next
  24.        Debug.Print "Demo2 : "; Format(Timer - T, "0.000s" )
  25. End Sub


Message édité par Marc L le 06-05-2017 à 11:00:04
n°2300299
daniel-12
Posté le 06-05-2017 à 11:33:10  profilanswer
 

sur un petit fichier cela marche, pas sur un gros
erreur exécution 9, l'indice n'appartient pas a la sélection
 
et cela garde les 4 lignes, j'ai donc des doublons

n°2300300
Marc L
Posté le 06-05-2017 à 11:44:29  profilanswer
 

 
            Oui les doublons sont conservés comme dans ton code et
            c'est tellement plus facile quand le besoin est clairement expliqué !
 
            L'erreur provient du fichier ne correspondant pas à ce que tu as posté et,
            sans indication précise de la ligne du fichier source et de la ligne de code déclenchant cette erreur,
            je ne pourrais deviner, tout au plus ajouter un test dans le code mais allongeant donc l'exécution …
 
            Donc il faut extraire les codes de la deuxième colonne sur neuf caractères,
            écrire dans le fichier résultat si ce n'est pas un doublon tout en remplaçant le caractère parasite,
            what else ?!


Message édité par Marc L le 06-05-2017 à 11:47:03
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Lecture fichier TXT caractère parasite ° →

 

Sujets relatifs
Javascript - Controle d'une chaine de caractère[Java] Arrêt traitement si doublons dans champ d'un fichier
[Perl] Arrêt traitement si doublons dans champ d'un fichierproblème sur fichier launch.bat
Pb lecture mail envoyé via PHPtransformer un fichier texte en XML
recherche d'un mot dans un fichier[Regex] prenant en compte le caractère "à"
bon fichiervba-copier des colonnes d'un fichier xls vers un autre fichier xls
Plus de sujets relatifs à : Lecture fichier TXT caractère parasite ° →


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR