Supprimer tout les caractères après un mot dans fichier texte

Résolu
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 16 déc. 2009 à 13:06
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 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

15 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 déc. 2009 à 14:19
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 déc. 2009 à 13:11
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.
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
16 déc. 2009 à 13:21
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 déc. 2009 à 13:25
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.
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
16 déc. 2009 à 13:38
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
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
16 déc. 2009 à 13:41
salut
tu peut nous donner un exemple de ta chaine et ce que tu veut laisser ?
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
16 déc. 2009 à 13:44
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)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 déc. 2009 à 13:48
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.
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
16 déc. 2009 à 13:56
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 déc. 2009 à 14:00
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.
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
16 déc. 2009 à 14:12
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 déc. 2009 à 14:20
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
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
16 déc. 2009 à 14:23
CA fonctionne, merci à tous
0
Claiyah Messages postés 580 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 20 avril 2010 3
16 déc. 2009 à 14:24
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
16 déc. 2009 à 14:26
tu ne te sers pas de nPos, Claiyah ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous