Supprimer tout les caractères après un mot dans 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
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour,

Voilà, dans un fichier texte j'aimerais supprimer tout ce qui se trouve après la chaine de caractère :

!
!
end


Comment faire ?

Merci

15 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
gaffe a garder le motif recherché dans la chaine de base, ucfoutu

Dim sBuffer As String
Dim nPos As Long
    Open "c:\a.txt" For Input As #1
        sBuffer = Input(LOF(1), 1)
    Close #1
    nPos = InStr(sBuffer, "!" & vbCrLf & "!" & vbCrLf & "end")
    If nPos Then
        Open "C:\b.txt" For Output As #1
            Print #1, Left$(sBuffer, nPos + 8);
        Close #1
    End If


enfin là, j'écris dans un fichier en sortie, pas forcément utile dans ton cas...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,
tu ouvres le fichier texte en question et le lis d'un bloc dansx une variable, sauf si (cas rare) il dépasse 2 GO
Soit t la variable ===>>>
if instr(t, "!") > 0 then 
  t = left(t, instr(t, "!") -1)
end if

tu fermes le fichier, le réouvre et ... y écris le contenu de la variable t

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Alors, merci, j'ai pas tout compris ou peut être pas tout dit.
Il y a plusieurs "!" qui sont dans mon texte auxquels je ne veux pas toucher.
Juste enlever tout ce qu'il y a après cette chaine uniquement:

!
!
end
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
ET ?
après quelle occurrence de ce caractère ?
La première ? ===>>> je t'ai alors déjà répondu...
Une autre ? Et laquelle, alors ?
Ta question reste en tout état de cause fort imprécise, notamment après ton dernier message ....
Explique avec détails et précisions !


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Je souhaite parcourir mon fichier texte.
Des que je trouve cette chaine de caractère :

!
!
end


Je supprime tout ce qui se trouve derrière.
Exemple, j'ai ce fichier :

interface vlan 8
ip address 192.168.1.1 255.0.0.0
!
!
end
zefkzrjgfjgrjigreed"é("'-è''vc-bv-è-(*rfgeerg
gergtrrth
trhtr


Après ma fonction, je veux avoir ceci :
interface vlan 8
ip address 192.168.1.1 255.0.0.0
!
!
end
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
2
salut
tu peut nous donner un exemple de ta chaine et ce que tu veut laisser ?
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
2
ah on a poster au meme moment lol
tu cherche le "end" : istr(1,tachaine,"end") et tu prend ce qui se trouve avant mid(tachaine,1,istr(1,tachaine,"end")+3=) ou avec left(tachaine, instr(tachaine, "end") +3)
end gros:

tachaine = left(tachaine, instr(tachaine, "end") +3)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
interface vlan 8
ip address 192.168.1.1 255.0.0.0
!
!
end


n'a nullement supprimé ce qui se trouvait après le !, mais uniquement ce qui se trouvait entre le dernier ! et le mod end ...
Alors ? ===>>> réexplique car manque de précisions !
Et quid si, plus loin, tu as encore un ou des ! ?
Tu supprimes quoi ?
Tu n'auras une réponse précise que lorsque ta question le sera (précise et sans failles). C'est sûr !
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Mais c'est pourtant clair je pense.

Quoi qu'il y ai après cette chaine de caractères :

!
!
end


Je veux tout enlever, je me moque de ce qu'il y a après.
Après end, je ne veux plus rien.
La chaine de caractère à chercher sera alors :

"!" & vbCrLf & "!" & vbCrLf & "end"


Des qu'on trouve ceci dans le fichier texte, on enlève tout ce qui se trouve après.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
alors tu as déjà la réponse (ma toute première à adapter ainsi) :
if instr(t, "!" & vbcrlf & "!" & vbcrlf & "end") > 0 then 
  t = left(t, instr(t, "!" & vbcrlf & "!" & vbcrlf & "end") -1)
end if

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
Ah !! On y est presque, j'ai fait cette fonction, seulement il m'enlève aussi la chaîne :

!
!
end


Moi je veux la garder :(

Voila ma fonction :

Public Function Degage(sFile As String)
Dim FF As Integer
FF = FreeFile
Dim sBuffer As String
Open sFile For Input As #FF
    sBuffer = Input(LOF(FF), 1)
Close #FF
If InStr(sBuffer, "!" & vbCrLf & "!" & vbCrLf & "end") > 0 Then
  sBuffer = Left(sBuffer, InStr(sBuffer, "!" & vbCrLf & "!" & vbCrLf & "end") - 1)
End If
Close #FF
FF = FreeFile
Open sFile For Output As #FF
Print #FF, sBuffer
Close #FF
End Function
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
pense aussi à mettre un ';' en fin de ton instruction Print, sous peine d'ajouter un saut de ligne...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
1
CA fonctionne, merci à tous
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
2
Dim sBuffer As String
Dim nPos As Long
    Open "c:\a.txt" For Input As #1
        sBuffer = Input(LOF(1), 1)
    Close #1
    nPos = InStr(sBuffer, "!" & vbCrLf & "!" & vbCrLf & "end") 'Trouver la position de la chaine 
    lenn = len("!" & vbCrLf & "!" & vbCrLf & "end") 'récupérer la longueur de la chaine
    If nPos Then
        Open "C:\b.txt" For Output As #1
            Print #1, Left$(sBuffer, lenn); 'récupérer le texte avant la position trouver + la chaine 
        Close #1
    End If
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
tu ne te sers pas de nPos, Claiyah ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic