Wörter mit weniger als XY buchstaben aus .txt löschen!

Nico192

Mitglied
Hi again!!
Sorry, aber irgendwie find ich nix dazu, und weiß auch nicht so recht nach was ich genau suchen sollte!!
Ich habe eine Textdatei, in denen z.B. folgende Wörter stehen:

Code:
Haus,Baum,ketten,motorsäge,Katze,halskrause,fahrrad,fahndung

Nun möchte ich das alle Wörter, die aus 5 oder weniger als 5 Buchstaben bestehen aus der Liste entfernt werden!!

Wie ist das möglich`Danke!!

Greetz N!C0
 
Hi,
also das ist jetzt mal aus dem Kopf (nicht getestet):
Visual Basic:
Dim a As String
Dim b As Variant
Dim c As Integer

  a = "Haus,Baum,ketten,motorsäge,Katze,halskrause,fahrrad,fahndung"
  b = Split(a, ",")

  For c = 0 To UBound(b)

    If Len(b(c)) <= 5 Then
       a = Replace(a, b(c) & ",", "")
       Text1.Text = a
    End If

  Next c
 
Hey danke!!
soweit ganz gut!
Also müsste ich die Datei einlesen (in jeder Zeile steht ein Wort)
und dann "ersetzen"...

Das Problem ist, die Dateien sind Riesig (!!) und ich glaube mit dieser Methode würde ich mir den Rechner abschiessen ;)

Danke schon mal, greetz N!C0
 
Hallo,
aber es ist so:
Selbst wenn es gehen würde, dass VB direkt auf die Textdateien zugreift ohne Sie einzulesen müsste das Programm ja alle Zeichen durchgehen, deshalb bleibt dir keine andere Möglichkeit als die Datei in eine Textbox oder ähnliche Controls einzulesen. Wie groß sind denn die Dateien?
 
Naja!
Also kleine Dateien (mit denen es vllt noch könnte) haben ne Größe zwischen
4MB bis 21MB ;)

4 MB ist wohl noch realisierbar!!

(Ich checks irgendwie wohl nie, wie lese ich ne Textdatei ein, und füge den ganzen Inhalt in eine Variable ein (Dann noch Enter = Leertaste)
Dann müsste es doch gehn?!

Und kannst du deinen "Kopf-Nich Getestet"-Code erklären *schäm*^^

Danke, Greetz N!C0
 
Hallo,
also das sind eigentlich alles Grundlagen, die du auch im Internet finden würdest. Ich frag mich nur warum hier kein anderer antwortet.
Also zum Einlesen später.
Erstmal erkläre ich den Code:

Visual Basic:
Dim a As String
Dim b As Variant
Dim c As Integer

  a = "Haus,Baum,ketten,motorsäge,Katze,halskrause,fahrrad,fahndung"
  b = Split(a, ",")

  For c = 0 To UBound(b)

    If Len(b(c)) <= 5 Then
       a = Replace(a, b(c) & ",", "")
       Text1.Text = a
    End If

  Next c

Für die Variable "c" verwendet man eigentlich "i" (hat sich so eingebürgert ;-))
Ich habe aber jetzt einfach mal c genommen. In der Variable "a" steht der Text, der eingelesen wurde. Dann müssen die einzelnen Wörter voneinander getrennt werden um zu erkennen welche Länge sie haben. Das geht mit dem "Befehl" "Split". Dieser benötigt zum einen den Ausgangsstring und zum anderen das Zeichen oder die zeichenfolge, die die Trennung der Wörter ausmacht. In diesem Falls as Komma (","). In der Variable b sind jetzt sozusagen mehrere Werte enthalten, die man durch "b()" abrufen kann.
"MsgBox (b(0))" würde z.B. "Haus" anzeigen (das erste Wort). Nun muss man noch in einer Schleife prüfen wie lang diese ausgelesenen Wörter sind. Dazu bedient man sich der For-Next-Schleife, die solange prüft bis der zweite angegebene Wert erreicht wurde. Wir weisen der Variable c den Wert 0 zu, weil die Split-Abfrage auch bei 0 anfängt. der Endwert ist die Anzahl der Kommas, die man mit "UBound(b)" abfragen kann.
Jetzt wird geprüft, ob das derzeit behandelte Wort größer oder gleich 5 ist, was mit Len" funktioniert. Normalerweise würde statt dem c in "Len(b(c))" eine Zahl ab 0 stehen. Doch diese Wert muss ja variabel sein. Beim ersten Durchgang steht dieser auf 0, beim zweiten auf 1 bis 7. Wenn die Länge des Wortes größer oder gleich 5 ist wird das Wort in dem String a einfach mit Replace durch nichts ersetzt. Die Zeile sieht etwas kompliziert aus, ist sie aber nicht. Anschließend wird in Text1 die Variable a eingelesen.

Naja, ich mach mir hier eine Arbeit ;-) Hoffentlich hast du's jetzt verstanden.

Mann, ich glaub das hier nicht. Warum hat der Firefox hier keine Cookies bzw. sie sind deaktiviert? In Opera klappt das wunderbar. Aber hier muss ich mich jedesmal neu einloggen bevor ich einen Beitrag abschicken kann. Unglaublich.

Zum Code mit dem Einlesen:
Visual Basic:
  Dim a As Integer
  Dim b

  a = FreeFile()
  Open "C:\boot.ini" For Input As #a
    b = Input(LOF(a), 1)
  Close #a
  Text1.Text = Mid$(b, 1, Len(b) - 0)
 
Zuletzt bearbeitet von einem Moderator:
D@nger hat gesagt.:
Ich frag mich nur warum hier kein anderer antwortet.
Du machst das doch ganz gut alleine ^^

@Nico192:
Wenn dir D@ngers Code nicht gefällt:
Du ließt jede Zeile der Textdatei ein (dazu beachtest du bitte meine momentane Signatur!)
Und direkt nachdem du eine Zeile aus der Datei, also praktisch ein Wort, gelesen hast, überprüfst du mit der Len-Funktion ob das Wort eine bestimmte Länge hat oder eben nicht.
also zum Beispiel so:
Visual Basic:
Dateinummer = FreeFile
'[...Datei öffnen...weiß nicht auswendig welche Open-Anweisung man da verwenden muss...]
While Not Eof(Dateinummer)
    '[...Zeile in Variable XY lesen...]
    If len(XY)<=4 then
       MsgBox "Wort ist zu kurz!"
else
     MsgBox "Wort ist passend!"
     '....Irgendwas mit XY tun
end if
Wend
 
Zuletzt bearbeitet:
Hallo Shakie, ja stimmt eigentlich ;-)
Zu deinem Code:
Klar geht das, aber ich wusste ja nicht, dass eine Zeile ein Wort ist.
 
Also müsste ich die Datei einlesen (in jeder Zeile steht ein Wort)
Hey erstmal :D
Danke, Danke, Danke für eure/deine Hilfe
Ich werde mir das alles ein paar mal durchlesen, ausprobieren, mit verschiedenen Beispielen bis ich alles verstanden habe ;)

Danke das du dir die Mühe gemacht hast

Grüße N!C0
 
Zurück