Supprimer tout les caractères après un mot dans fichier texte [Résolu]

Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
- - Dernière réponse : Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
- 16 déc. 2009 à 14:26
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
Afficher la suite 

15 réponses

Meilleure réponse
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 189 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
0
Merci
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
Commenter la réponse de Lokomass
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
0
Merci
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
Commenter la réponse de Lokomass
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
0
Merci
salut
tu peut nous donner un exemple de ta chaine et ce que tu veut laisser ?
Commenter la réponse de Claiyah
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
0
Merci
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)
Commenter la réponse de Claiyah
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
0
Merci
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.
Commenter la réponse de Lokomass
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
0
Merci
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
Commenter la réponse de Lokomass
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
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
Commenter la réponse de Renfield
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
0
Merci
CA fonctionne, merci à tous
Commenter la réponse de Lokomass
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
0
Merci
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
Commenter la réponse de Claiyah
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
tu ne te sers pas de nPos, Claiyah ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield