Effacer une ligne dans un fichier txt

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 758 fois - Téléchargée 28 fois

Contenu du snippet

Le code permet d'effacer une ligne dans un fichier txt sans laisser de ligne blanche.
Dans cette exemple, je selectionne le Nom d'un dinosaure à effacer dans une combobox(le nom du dinosaure fait partie des premiers caractères de chaque ligne, la suite de la ligne étant diverse caractéristiques)

Source / Exemple :


Private Sub BtnSupprimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSupprimer.Click

        Dim DinosaureASupprimer As String = CbBxDinosaure.SelectedItem
        Dim objFichierDinosaure = New System.IO.StreamReader(Application.StartupPath & "/dinosaure.txt", System.Text.Encoding.UTF8)
        Dim strligne As String
        Dim tabDinosaure() As String
        Dim x As Integer = 0

        Dim reponse As String = MessageBox.Show("Etes-vous sûr de vouloir supprimer le dinosaure " _
        & DinosaureASupprimer & ".", "Suppresion de Dinosaure", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

        If reponse = DialogResult.Yes Then

            Do While objFichierDinosaure.Peek <> -1

                strligne = objFichierDinosaure.ReadLine

            

                ReDim Preserve tabDinosaure(x)

                tabDinosaure(x) = strligne

                x += 1

            Loop

            objFichierDinosaure.close()

            For x = 0 To UBound(tabDinosaure)

                Dim dinosaureDuTableau As String = Trim(tabDinosaure(x).Substring(0, 19))

               
                If DinosaureASupprimer = dinosaureDuTableau Then

                   
                    Dim y As Integer

                    For y = x To UBound(tabDinosaure) - 1
                        tabDinosaure(x) = tabDinosaure(x + 1)

                    Next

                    Exit For 

                End If

            Next

            
            Dim objstreamwriter As New System.IO.StreamWriter(Application.StartupPath & "/dinosaure.txt", False)

        
            Dim z As Integer
            For z = 0 To UBound(tabDinosaure) - 1

                objstreamwriter.WriteLine(tabDinosaure(z))

            Next

            CbBxDinosaure.Items.RemoveAt(CbBxDinosaure.SelectedIndex)

     
            CbBxDinosaure.SelectedIndex = 0

            objstreamwriter.Close()

        End If

    End Sub

A voir également

Ajouter un commentaire

Commentaires

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Précision:
nroline est en fait un DWORD donc plage de 32 bits full, en VB aucune idée si est possible.
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
http://bnmvp.free.fr/RemLine.zip
Il y a la dll (3 Ko) et prog de test (tout en C...).
Le numéro de ligne est BASE 0 !!!
Le fichier est traité sur place sans utiliser de tmp, 256 Ko de mémoire (et rien d'autre) pendant le traitement.
Suppression de ligne sur txt de 1,6 Go en 1mn10, à voir selon PC.
Utilisation de la DLL depuis VB:
Declare Function bnRemLine Lib "bnLine.dll" (ByVal szFile As String, ByVal nroline As Long) As Long
Retourne
- 0 : NO ERROR
- -1: FICHIER NON DISPO OU SIZE > 2^63
- 1 : ERR MEMORY
- 2 : ERR SYSTEM (GetFileSize, ReadFile ou WriteFile)
Fichier doit être fermé, dll prend un accès exclusif dessus.
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
OneHacker, pour revenir au sujet, 5 mn c'est pour supprimer une ligne très loin du début je pense.
Je peaufine et fais encore qlqs tests sur une dll et je vous la file ensuite, elle vient de supprimer la ligne 19800 en qlqs centièmes de seconde. J'essaie illico sur beaucoup plus gros, on verra.
TroXsA
Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
2 octobre 2016
1 -
Perso !
je vous rappel qu'il existe un forum pour ce genre de dicussion ! car plus sa va plus ça n'a rien a voir avec le code source donné :/
jsem2k1
Messages postés
125
Date d'inscription
samedi 11 décembre 2004
Statut
Membre
Dernière intervention
12 août 2008
1 -
tien essay sa j'ai tester er sa marche
Imports System.Runtime.InteropServices
<DllImport("user.DLL", EntryPoint:="SendMessageA", SetLastError:=True, _
CharSet:=CharSet.Unicode, ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function SendMessageA( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As String) As Long
' Leave the body of the function empty.
End Function
vas aussi voir se site (http://msdn2.microsoft.com/fr-fr/library/5k8a3s7s.aspx) pour migré l'appelle des api
le type any n'est plus pris en compte

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.