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
Dernière intervention
15 mai 2013
- - Dernière réponse : Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 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 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
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 a aidé 102 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
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
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
Contributeur
Dernière intervention
11 avril 2018
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
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
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
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
Contributeur
Dernière intervention
11 avril 2018
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
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
Contributeur
Dernière intervention
11 avril 2018
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
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
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
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
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
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
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
tu ne te sers pas de nPos, Claiyah ?

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.