Concaténer chaines dans un fichier texte

Résolu
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 10 mars 2010 à 11:53
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 10 mars 2010 à 15:10
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

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mars 2010 à 12:57
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mars 2010 à 12:09
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]
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
10 mars 2010 à 12:11
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)
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
10 mars 2010 à 12:17
Salut, oui désolé, c'est Vbcr et non Vbvr

Je test ça merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
10 mars 2010 à 12:24
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é !
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mars 2010 à 12:43
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
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
10 mars 2010 à 13:39
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 ?
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
10 mars 2010 à 15:10
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
0
Rejoignez-nous