vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Begriff in über 500 Dateien austauschen - Fehlerkorrektur 
Autor: Preisser
Datum: 08.04.11 21:15

Sorry, im vorherigen Beitrag ist mir in der MyByteExchangerStream-Klasse leider ein Fehler unterlaufen (und konnte ihn nicht mehr editieren).
Hier die korrigierte Version.

Option Strict On
Public Class MyByteExchangerStream
    Inherits System.IO.Stream
 
    Private ReadOnly ausgabeStream As System.IO.Stream
    Private ReadOnly suchenBytes() As Byte
    Private ReadOnly ersetzenBytes() As Byte
    Private aktSuchPos As Integer = 0
 
    Public Sub New(ausgabeStream As System.IO.Stream, ByVal suchenBytes() As _
      Byte, ByVal ersetzenBytes() As Byte)
        If ausgabeStream Is Nothing Or suchenBytes Is Nothing Or ersetzenBytes _
        Is Nothing Then Throw New NullReferenceException()
        If suchenBytes.Length = 0 Then Throw New ArgumentException()
 
        Me.ausgabeStream = New System.IO.BufferedStream(ausgabeStream)
        Me.suchenBytes = suchenBytes
        Me.ersetzenBytes = ersetzenBytes
    End Sub
 
    Public Overrides ReadOnly Property CanRead As Boolean
        Get
            Return False
        End Get
    End Property
 
    Public Overrides ReadOnly Property CanSeek As Boolean
        Get
            Return False
        End Get
    End Property
 
    Public Overrides ReadOnly Property CanWrite As Boolean
        Get
            Return True
        End Get
    End Property
 
    Public Overrides Sub Flush()
    End Sub
 
    Public Overrides ReadOnly Property Length As Long
        Get
            Throw New NotSupportedException()
        End Get
    End Property
 
    Public Overrides Property Position As Long
        Get
            Throw New NotSupportedException()
        End Get
        Set(value As Long)
            Throw New NotSupportedException()
        End Set
    End Property
 
    Public Overrides Function Read(buffer() As Byte, offset As Integer, count _
      As Integer) As Integer
        Throw New NotSupportedException()
    End Function
 
    Public Overrides Function Seek(offset As Long, origin As _
      System.IO.SeekOrigin) As Long
        Throw New NotSupportedException()
    End Function
 
    Public Overrides Sub SetLength(value As Long)
        Throw New NotSupportedException()
    End Sub
 
    Public Overrides Sub Write(buffer() As Byte, offset As Integer, count As _
      Integer)
        For i As Integer = offset To offset + count - 1
            WriteByte(buffer(i))
        Next
    End Sub
 
    Public Overrides Sub WriteByte(value As Byte)
        If value = suchenBytes(aktSuchPos) Then 'Übereinstimmung gefunden
            aktSuchPos += 1
            If aktSuchPos = suchenBytes.Length Then 'Komplett, jetzt 
            ' ErsetzenBytes schreiben
                ausgabeStream.Write(ersetzenBytes, 0, ersetzenBytes.Length)
                aktSuchPos = 0
            End If
        Else ' Keine Übereinstimmung, falls Puffer vorhanden, leeren
            If aktSuchPos > 0 Then
                'Schauen, ob es innerhalb des Suchmusters eine weitere 
                ' Übereinstimmung gibt
                Dim gefundenStartpos As Integer = -1
                For j As Integer = 1 To aktSuchPos
                    For z As Integer = j To aktSuchPos
                        Dim vergleichByte As Byte = If(z = aktSuchPos, value, _
                          suchenBytes(z))
                        If vergleichByte <> suchenBytes(z - j) Then
                            Exit For
                        ElseIf z = aktSuchPos Then
                            gefundenStartpos = j
                            Exit For
                        End If
                    Next
                    If gefundenStartpos >= 0 Then Exit For
                Next
                If gefundenStartpos >= 0 Then
                    ausgabeStream.Write(suchenBytes, 0, gefundenStartpos)
                    aktSuchPos += -gefundenStartpos + 1
                Else 'keine weitere Übereinstimmung gefunden
                    ausgabeStream.Write(suchenBytes, 0, aktSuchPos)
                    ausgabeStream.WriteByte(value)
                    aktSuchPos = 0
                End If
            Else
                ausgabeStream.WriteByte(value)
            End If
        End If
    End Sub
 
    Protected Overrides Sub Dispose(disposing As Boolean)
        If aktSuchPos > 0 Then
            ausgabeStream.Write(suchenBytes, 0, aktSuchPos)
        End If
        ausgabeStream.Dispose()
    End Sub
 
End Class


Beitrag wurde zuletzt am 09.04.11 um 03:07:31 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Begriff in über 500 Dateien austauschen1.543Luschi03.04.11 17:38
Re: Begriff in über 500 Dateien austauschen916Micke05.04.11 13:36
Re: Begriff in über 500 Dateien austauschen968Manfred X05.04.11 14:12
Re: Begriff in über 500 Dateien austauschen1.013DotNetErbse05.04.11 15:02
Re: Begriff in über 500 Dateien austauschen906Manfred X05.04.11 15:15
Re: Begriff in über 500 Dateien austauschen1.018Preisser05.04.11 15:28
Re: Begriff in über 500 Dateien austauschen923Manfred X05.04.11 15:55
Re: Begriff in über 500 Dateien austauschen926Preisser05.04.11 16:01
Re: Begriff in über 500 Dateien austauschen908DotNetErbse06.04.11 07:48
Re: Begriff in über 500 Dateien austauschen901Luschi07.04.11 09:17
Re: Begriff in über 500 Dateien austauschen910Preisser08.04.11 20:32
Re: Begriff in über 500 Dateien austauschen - Ergänzung895Preisser08.04.11 20:33
Re: Begriff in über 500 Dateien austauschen - Fehlerkorrektu...963Preisser08.04.11 21:15
mhmm ..... ???859Micke08.04.11 21:59
Re: mhmm ..... ???972Preisser08.04.11 22:09
Re: Zum Vergleich: PowerBASIC Version1.158eierlein08.04.11 23:43
Re: Zum Vergleich: PowerBASIC Version983Preisser09.04.11 00:05
Re: Zum Vergleich: PowerBASIC Version915eierlein09.04.11 01:27

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel