Unnötige Leerzeichen aus Text entfernen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von PolloLoco.

    Unnötige Leerzeichen aus Text entfernen

    Guten Tag,
    ich habe einen Text, der jedoch komisch Formatiert ist. Vor jeder Zeile stehen ein paar Leerzeichen (5-10 teilweise) und manchmal sind auch zwei Zeilenumbrüche da statt nur einem (also es ist eine Leerzeile da). Wie kann ich beides entfernen? Also dass der Text nur Leerzeichem zwischen Wörtern hat (wie ein normaler Text) und dass es keine Leerzeilen gibt? ?(
    MfG PolloLoco
    Guck dir mal die String-Klasse im ObjectBrowser an - die hat enorm viele Methoden.
    Für dein letztes Prob haben wir ja String.Split() verwendet - eine Überladung - aber auch zum Trimmen von Strings stehen geeignete Methoden bereit.

    Hier stelle ich den ObjectBrowser vor: VisualStudio richtig nutzen (Google ist nicht deine Mami)

    Ich finds ungemein wichtig, dass man sich das Ding vernünftig einrichtet (auch dazu gibts weiterführende Links), und dass man das Teil gebrauchen lernt.
    Das heißt aber auch, dass du mehr Programmieren lernst, man muss einiges wissen, was ist eine Überladung, was ist ein Konstruktor, was ist der Unterschied zw. Function und Sub, und so Sachen.

    Erst dann bekommt der OB seinen wirklichen unschätzbaren Wert.
    Ich hab mir Trim mal in OB angeschaut und es in mein Programm eingebaut, aber es hat nur die Leerzeichen in der Ersten Zeile Entfernt. Dann hab ich versucht mir irgendwas zu basteln, was den Text Zeile für Zeile trimmt. Das hat aber nicht geklappt

    Quellcode

    1. Der Index war außerhalb des Arraybereichs.

    Kannst du mir sagen, wie ich das machen kann? Die Leerzeichen sind immer am Anfang einer Zeile. Und wie lösch ich die Leerzeilen? Ich will nicht, dass alles in einer Zeile landet, sondern nur, dass alles untereinander ist.
    Beispiel (falsch):

    Quellcode

    1. bla
    2. bla
    3. bla


    Beispiel (so soll es sein):

    Quellcode

    1. bla
    2. bla
    3. bla
    Okay ich hab ne andere Idee. Kann ich nicht einfach per RegEx alle Leerzeichen, die alleine stehen und von alphanumerischen Zeichen umgeben sind durch ein | ersetzen oder so? Und dann alle anderen Leerzeichen durch nichts ersetzen?
    Ja, mit Regex hast du gemein viele Möglichkeiten - ungleich mehr als mit dem, was die String-Klasse anbietet - Regex ist ja eine komplette eigene Abfrage-Sprache.

    Ich zb würde hier mal wieder den Regex-MatchEvaluator einsetzen - guck, hier hab ich Mini-Tut dazu gemacht:
    codeproject.com/Tips/1114169/A…with-Regex-Matchevaluator

    Du müsstest also zum einen einen Pattern finden, der whitespace-Gruppen matcht, und dann einen MatchEvaluator schreiben, der die Matches in geeigneter Weise ersetzt.
    Nämlich, wenn ein Match mindestens einen ZeilVorschub enthält, dann durch "\n" ersetzen, sonst durch " ".
    Ich hab mir jetzt aus paar anderen Projekten was zusammen geschnitten. Das klappt auch. Alle Leerzeichen weg und keine freien Zeilen mehr da. Aber sobald ich den Text aus der Textbox rauskopiere und in Notepad++ einfüge, hab ich wieder ein paar Leerzeilen (komplett Leer, keine Leerzeichen oder sonstiges). Was ist da passiert? Oder besser: Wie behebe ich das?

    PolloLoco schrieb:

    hab ich wieder ein paar Leerzeilen
    Hier ist das Problem des Zeilenende-Zeichens.
    Besser ist, Du belässt Deinen Text in einem Stringarray. Dies behandelst Du so:
    Leg Dir eine List(Of String) an.
    Iteriere über das eingelesene Array und formatiere die einzelnen Zeilen nach Deinen Bedürfnissen.
    Wenn eine resultierende Zeile nicht aus einem Leerstring besteht, hängst Du sie an die List an.
    Wenn Du durch bist, speicherst Du die List so:

    VB.NET-Quellcode

    1. IO.File.WriteAllLines(DEIN_PFAD, DEINE_LISTE.ToArray())
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab das jetzt so in etwa gelöst wie von RodOfGermany beschrieben. Habs mit Textbox.Lines gemacht und geprüft ob eine Zeil nicht it einem Buchstaben anfängt (Es gibt nur Text, also lässt sich das machen). Ich hab den Post leider erst danach gelesen, aber es klappt jetzt. Danke an alle