Soyez le premier à donner votre avis sur cette source.
Snippet vu 14 758 fois - Téléchargée 28 fois
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
Commentaires
nroline est en fait un DWORD donc plage de 32 bits full, en VB aucune idée si est possible.
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.
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.
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é :/
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.