doppelte wörter

pking

Gesperrt
Code:
Private Sub Form_Load()
Dim lal, lol As String
lal = FreeFile
 
Open "C:\test.txt" For Input As #lal
Line Input #lal, lol
MsgBox lol
End If
 

 
End Sub

Wie guck ich ob z.B in der test.txt ein Wort doppelt ist ohne es im source zu definieren?

mfg,
pking
 
Wie müssen wir uns das denn vorstellen? Ändert sich jedesmal der String, nach dem Du suchst, oder möchtest Du einfach nur feststellen, ob überhaupt Wörter - egal welche - in dem Text doppelt vorkommen?

@admins: Kann es sein, dass irgendwas mit Eurer Uhr nicht stimmt? Ich antworte gerade auf einen Beitrag, der in 40min erst geschrieben wird :suspekt:
 
Zuletzt bearbeitet:
Da sind gewisse Zahlen: (19585, 19836, 91834), die doppelt sind. Ich möchte alle paare die doppelt sind in eine textdatei schreiben.

Um nicht die Textdatei zu überschreiben int(rnd) nutzen. Die Frage ist nun wie überprüfte ich ob es doppelte gibt, ohne sie im programm zu deklarieren.

Also wenn es z.B 19585 10mal gibt soll er es 10mal in eine Textdatei printen eben alles ins ouput was doppelt ist.


mfg,
pking
 
Bau eine Collection Klasse, lies die ganze Datei ein und hängst alle Zahlen in deine Collection. Wenn die Zahl schon drin ist, solltest du dort in der Klasse einen Zähler erhöhen. Am Schluss läuft du die Collection durch und gibst alle Zahlen mit einem Zählerwert grösser 1 aus.
 
Mal schnell zusammengehackt, keine Garantie auf Fehlerfreiheit:

Klasse des Objektes zum Zählen "CounterClass"
Code:
Option Explicit

Private m_Counter As Integer
Private m_Value As String


Private Sub Class_Initialize()

    m_Counter = 1
    m_Value = ""

End Sub


Public Function IncreaseCount()
    m_Counter = m_Counter + 1
End Function

Public Property Get Count()
    Count = m_Counter
End Property

Public Property Get Value() As String
    Value = m_Value
End Property

Public Property Let Value(Val As String)
    m_Value = Val
End Property

Klasse der Collection: "CountingCollection", die hab ich mit den Klassengenerator von VB erstellt und entsprechend die Add Methode angepasst.
Code:
Option Explicit

'Lokale Variable für eine Auflistung.
Private mCol As Collection

Public Function Add(Value As String) As CounterClass
    
    Dim oCounter As CounterClass
    
    Set oCounter = GetValueInCollection(Value)
    
    If oCounter Is Nothing Then
        'Noch nicht vorhanden neuen Erzeugen
        
        Set oCounter = New CounterClass
        oCounter.Value = Value
        
        ' an Collection anhängen
        mCol.Add oCounter, "K" & Value
    Else
        ' Zahl bereits vorhanden
        oCounter.IncreaseCount
    End If
    
    'das erstellte Objekt zurückgeben
    Set Add = oCounter
    Set oCounter = Nothing

End Function

Private Function GetValueInCollection(ByVal Value) As CounterClass
On Error Resume Next
    
   Set GetValueInCollection = mCol.Item("K" & Value)
    
End Function


Public Property Get Item(vntIndexKey As Variant) As CounterClass
    'Wird verwendet, wenn auf ein Element der Auflistung zugegriffen
    'wird. vntIndexKey enthält entweder den Index oder den Schlüssel.
    'Daher wird der Parameter als Variant deklariert.
    'Syntax: Set foo = x.Item(xyz) or Set foo = x.Item(5)
  Set Item = mCol(vntIndexKey)
End Property



Public Property Get Count() As Long
    'Wird verwendet, wenn die Anzahl der Elemente
    'in der Auflistung ermittelt werden soll.
    'Syntax: Debug.Print x.Count
    Count = mCol.Count
End Property


Public Sub Remove(vntIndexKey As Variant)
    'Wird verwendet, wenn ein Element aus der Auflistung
    'entfernt werden soll. vntIndexKey enthält entweder
    'den Index oder den Schlüssel. Daher wird der Parameter
    'als Variant deklariert.
    'Syntax: x.Remove(xyz)


    mCol.Remove vntIndexKey
End Sub


Public Property Get NewEnum() As IUnknown
    'Diese Eigenschaft ermöglicht, die Elemente der
    'Auflistung mit For...Each zu durchlaufen.
    Set NewEnum = mCol.[_NewEnum]
End Property


Private Sub Class_Initialize()
    'Erstellt die Auflistung, wenn die Klasse erstellt wird.
    Set mCol = New Collection
End Sub


Private Sub Class_Terminate()
    'Entfernt die Auflistung aus dem Speicher, wenn die Klasse beendet wird.
    Set mCol = Nothing
End Sub

Nun zum Füllen und Auslesen:
Code:
    Dim oCountCollection As New CountingCollection
    Dim oCounter As CounterClass
    
    
    ' Collection Füllen
    ' ..
    oCountCollection.Add Number
    '..


    ' Auslesen
    For Each oCounter In oCountCollection
        
        If oCounter.Count  > 1 Then
            Debug.Print "Mehrfach vorhanden: " & oCounter.Value
        End If
    Next
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück