Concaténer chaines dans un fichier texte [Résolu]

Signaler
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
-
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
-
Bonjour a tous,

Petit soucis avec un fichier texte (encore).
J'ai ce fichier texte par exemple :

.....'Il peut y avoir n lignes avant
tralala
trilili
trololo
tru
lu
lu
...'Il peut y avoir n lignes apres


Et j'aimerai obtenir :


.....'Il peut y avoir n lignes avant
tralala
trilili
trololo
trululu
...'Il peut y avoir n lignes apres


En fait les trois lignes (tru-lu-lu) sont découpés avec des "vbvr" au milieu.
Je ne vois pas comment faire

Merci de votre aide

8 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
ouai :

Private Sub Form_Load()
    Const sFileName As String = "c:\test.txt"
    
    Dim FF          As Integer
    Dim sBuffer     As String
    Dim saLines()   As String
    Dim i           As Long
    Dim j As Long
    
'   fichier en tableau
    FF = FreeFile
    Open sFileName For Input As #FF
        sBuffer = Input(LOF(FF), 1)
    Close #FF
    saLines = Split(sBuffer, vbCrLf)

'   AVANT =>
    Debug.Print sBuffer
    Debug.Print "===================="

'   position précédente de "TRU"
    For i = 0 To UBound(saLines)
        If saLines(i) = "trololo" Then Exit For
    Next i
    
'   conserve première partie
    sBuffer = vbNullString
    For j = 0 To i
        sBuffer = sBuffer & saLines(j) & vbCrLf
    Next j
    
'   3 items suivants
    sBuffer = sBuffer & saLines(i + 1) & saLines(i + 2) & saLines(i + 3)

'   reste, sauve, fin
    For j = i + 4 To UBound(saLines)
        sBuffer = sBuffer & vbCrLf & saLines(j)
    Next j
    
    FF = FreeFile
    Open sFileName For Output As #FF
        Print #FF, sBuffer;
    Close #FF

'   APRES =>
    Debug.Print sBuffer
    Debug.Print "===================="
    
    Erase saLines
    Unload Me
End Sub
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
salut,

vbvr? connais pas
VBCR ou VBLF

http://www.codyx.org/snippet_remplacer-chaine-autre-dans-fichier_187.aspx#598

Call ChangeWords(vbcr & "lu" & vbcr & "lu", "lulu", "C:\test.txt")

[hr]
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

Est-ce un traitement à corriger qui produit cet effet et alors présente le code pour correction?

Sinon il faut lire le fichier complet
et faire un remplacement de la chaine en réécrivant le fichier complet

Buffer= Replace(Buffer,"vbvr","")

Mais en fait de vbvr je pense qu'il s'agit de CRLF (carriage return- line feed)
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Salut, oui désolé, c'est Vbcr et non Vbvr

Je test ça merci.
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Oui alors je vois, en fait j'ai un peu simplifier le problème à la base pour essayer de finir tout seul, mais en fait c'est encore un peu plus compliqué que ça.
Pour faire simple,, le "tru" "lu" et "lu" sont simplement les chaines qui sont présentes à chaque fois que la ligne.
C'est à dire que le fichier peut être ceci :

[code]
.....'Il peut y avoir n lignes avant
tralala
trilili
trololo
azertytru ytreza'Il peut y avoir n'importe quoi avant et après cette chaine "tru"
tyuioplu poiuyt'Il peut y avoir n'importe quoi avant et après cette chaine "lu"
wxcvbnlu wxcvbn'Il peut y avoir n'importe quoi avant et après cette chaine "lu"
...'Il peut y avoir n lignes apres
[\code]

Et j'aimerais toujours :

[code]
.....'Il peut y avoir n lignes avant
tralala
trilili
trololo
azertytru ytrezatyuioplu poiuytwxcvbnlu wxcvbn
...'Il peut y avoir n lignes apres
[\code]

En fait, "tru" "lu" et "lu" sont simplement les chaines qui se trouvent sur la ligne mais que l'ont retrouvera à coup sur à chaque fois. Il faut concaténer en fait toute la ligne ou se trouve "tru" avec celle ou se trouve "lu" et l'autre "lu" sans tenir compte de ce qu'il y dedans.

J'espère être clair. J'aurais du présenter le bon problème dès le début, je me suis surestimé !
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
ok...

pas grand chose à modifier alors
un tableau reçoit split(buffer,....)
tu cherches la position de trololo
tu conserves & vbcrlf
tu ajoutes les 3 items suivants (puisque tu as un tableau) que tu retravailles comme tu veux (un replace donc)
et tu ajoutes le reste, et tu sauves
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Ca fonctionne impec, mais si maintenant je ne sais pas ce qu'il y avant ?
Comment je peux faire ?
Est ce que je ne peux pas juste trouver la position de la chaine contenant "Tru" directement ?
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
J'ai réussi en écrivant cette fonction, sans se préoccuper de ce qu'il y a avant "Tru"

Public Function ForNortel1(sFileName As String)
    
    Dim FF          As Integer
    Dim sBuffer     As String
    Dim saLines()   As String
    Dim i           As Long
    Dim j As Long
    
'   fichier en tableau
    FF = FreeFile
    Open sFileName For Input As #FF
        sBuffer = Input(LOF(FF), 1)
    Close #FF
    saLines = Split(sBuffer, vbCrLf)

'   AVANT =>
    Debug.Print sBuffer
    Debug.Print "===================="

'   position précédente de "TRU"
    For i = 0 To UBound(saLines)
        If InStr(saLines(i), "traffic-control in-out re-authentication") > 0 Then
            i = i - 1
            Exit For
        End If
    Next i
    
'   conserve première partie
    sBuffer = vbNullString
    For j = 0 To i
        sBuffer = sBuffer & saLines(j) & vbCrLf
    Next j
    
'   3 items suivants
    sBuffer = sBuffer & saLines(i + 1) & saLines(i + 2) & saLines(i + 3)

'   reste, sauve, fin
    For j = i + 4 To UBound(saLines)
        sBuffer = sBuffer & vbCrLf & saLines(j)
    Next j
    
    FF = FreeFile
    Open sFileName For Output As #FF
        Print #FF, sBuffer;
    Close #FF

'   APRES =>
    Debug.Print sBuffer
    Debug.Print "===================="
    
    Erase saLines
End Function


Merci