Microsoft 365 Modifier un fichier texte

ivan27

XLDnaute Occasionnel
Bonsoir à tous,

J'ai besoin de modifier certaines lignes dans des fichiers textes.
Les fichiers en question sont des fichiers EDI.
La chaîne à modifier se trouve dans le segment GIN+BN+
Si le nombre qui suit est composé de 28 caractères, il faut ajouter des espaces après les caractères 10, 4, 6, 4, 4
Si le nombre qui suite est composer de 30 caractères, il faut ajouter des espaces après les caractères 10, 6, 6, 4, 4
Je vous communique en pièce jointe des fichiers exemples.
Il peut y avoir plusieurs centaines de ligne GIN+BN+ dans un même fichier et les lignes ne se suivent pas obligatoirement.
Merci d'avance pour votre aide.
Bonne soirée
 

Pièces jointes

  • après.txt
    877 bytes · Affichages: 14
  • avant.txt
    853 bytes · Affichages: 14
Solution
Re,
Un nouvel essai. Cela marche avec la chaîne que vous avez donné.
Par contre je ne suis pas parvenu à détecter que le fichier avait déjà été traité.
Impossible de se baser sur des espaces ou des double return car le fichier de base pourraient en comporter.

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @ivan27, @sylvanu , le Forum

Sylvanu, quand tu auras 5 minutes pourras-tu m'expliquer ce qu'est "Pattern" utilisé dans :
If InStr(t(i), Pattern) > 0 Then
Car je n'ai jamais vu ça et l'aide ne m'explique pas plus clairement ce que c'est ... (?)



Merci d'avance et bonne journée
@+Thierry
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Tout simplement parce que j'ai oublié de déclarer le pattern.:)
Je voulais sécuriser avec la présence d'un apostrophe dans la chaîne.
Par contre il y avait un autre bug, l'ajout de ce même apostrophe intempestif en fin de chaîne.
Les deux sont corrigés dans cette V2.
 

Pièces jointes

  • TraitementFichierTxt(V2).xlsm
    22.8 KB · Affichages: 4

_Thierry

XLDnaute Barbatruc
Repose en paix
Re

Ah bon, oui, d'où l'utilité d'Option Explicit !

1594103553594.png


Bonne journée
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Sylvanu
Oh ne le prend pas mal, moi j'étais juste curieux car je ne comprenais pas "Pattern" qui en plus est une property de LineFormat, mais avant de poster ma question, j'aurais simplement du tester avec Option Explicit.
Mais sinon bon boulot, je pense qu'Ivan sera satisfait !, Pas "d'outrecuidance" entre-nous LoL !
Bien à toi, à vous
@+Thierry
 

ivan27

XLDnaute Occasionnel
Bonjour le forum, sylvanu,
Merci beaucoup pour cette proposition.
Je viens de tester sur un fichier d'exploitation. Par contre, je souhaiterais que la transcription fonctionne uniquement sur les chaînes de 28 ou 30 caractères comme dans mon fichier test.
Or, j'ai également une conversion sur ce genre de chaîne :

GIN+BN+*6058951534101250000637050001300'
GIN+BN+*605895153 410125 000063 7050 001300'

Bien cordialement,
Ivan
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
@thierry, No problem. Ce qui m'a amusé est que si bien même il y avait Option explicit et la variable déclarée, le problème serait resté entier puisqu'il ne s'agissait pas d'une déclaration de variable mais de son initialisation.
@ Ivan, je corrige. de toute façon il y a un autre bug de sécurité. Si, par inadvertance, vous traitez un fichier déjà traitez alors le fichier est mal modifié. ( structure if then else inadaptée en l'état )
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Un nouvel essai. Cela marche avec la chaîne que vous avez donné.
Par contre je ne suis pas parvenu à détecter que le fichier avait déjà été traité.
Impossible de se baser sur des espaces ou des double return car le fichier de base pourraient en comporter.
 

Pièces jointes

  • TraitementFichierTxt(V3).xlsm
    22.6 KB · Affichages: 6

ivan27

XLDnaute Occasionnel
Re bonjour le forum, sylvanu,

Je viens de faire plusieurs tests avec cette nouvelle version et le résultat est plutôt concluant.
Le nombre de caractères est respecté et les espaces déjà existants sont également pris en compte.
Il ne faut pas lancer le code plusieurs fois sur le même fichier car il ajoute un retour chariot sur toutes les lignes mais à part ce petit problème ça fonctionne parfaitement !
Je clôture la conversation et je te réitère mes remerciements.
Bonne journée à tous
Ivan
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Désolé je n'ai pu résoudre le problème du double traitement.
C'eût été possible au prix de critères restrictifs sur le fichier : pas de double saut de ligne, pas d'espaces intempestifs ...
Sauf si on avait la possibilité de rajouter une ligne "commentaire", mais ça dépend de l'outil qui va consommer le fichier.
 

Discussions similaires

Réponses
6
Affichages
307
Réponses
4
Affichages
283

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa