Suche Hilfe bei einem Text Converter

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Thias.

    Suche Hilfe bei einem Text Converter

    Hallo Leute ich bin ein ziemlicher Anfänger was Visual Basic angeht.
    Ich wollte ein kleines Tool schreiben mit dem ich eine Txt datei in einem bestimmten Format einlesen kann und es in einem anderen Format wieder Ausgeben kann.
    eingabe Format soll eine Koordinatenliste in Folgender Form sein: (punktnummer)(3 Leerzeichnen)(Punktcode)(2Leerzeichen)(Rechtwert)(2 Leerzeichen)(Hochwert)(2 Leerzeichen)(Höhe) also Bsp. 200145 00008 2415821.215 5774521.568 100.214
    Ausgabeformat soll sein: (Punktnummer)(2 LZ ein Komma 2LZ)(Rechtswert)(2 LZ ein Komma 2LZ)(Hochwert)(2 LZ ein Komma 2LZ)(Höhe)(2 LZ ein Komma 2LZ)(Punktcode)
    Bsp. 200145 , 2415821.215 , 5774521.568 , 100.214 , 00008

    Diesen Quellcode habe ich bis jetzt für das einlesen und speichern der Datei:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. OpenFileDialog1.ShowDialog()
    4. Label1.Text = OpenFileDialog1.FileName
    5. TextBox1.Text = My.Computer.FileSystem.ReadAllText(Label1.Text)
    6. End Sub
    7. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    8. SaveFileDialog1.ShowDialog()
    9. My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + "txt",
    10. TextBox1.Text, False)
    11. End Sub
    12. End Class


    Habe 2 Buttons und eine Richtext box und zwei labels

    ich brauche jetzt nur noch einen Button der das gewünschte Format in der Richbox ändert und dann kann ich es ausgeben.

    Vielen Dank im vorraus

    cheesy1892

    (Habe visual basic 2010 express)

    Verschoben und Codetag eingefügt. ~Trade

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Substring sollte Dir weiterhelfen, z.B.:

    VB.NET-Quellcode

    1. Dim Punktnummer = TextBox1.Text.Substring(0, 6)
    2. Dim PunktCode = TextBox1.Text.Substring(9, 5)

    Oder dieser Code:

    VB.NET-Quellcode

    1. Dim Koordinaten As String() = TextBox1.Text.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
    2. Dim Punktnummer As String = Koordinaten(0)
    3. Dim PunktCode As String = Koordinaten(1)
    4. ' usw.


    Ansonsten: [Forum] Wie füge ich Quellcode korrekt im Forum ein?

    @Moderator / Admin

    Dies hat offensichtlich nichts mit VBA (und Word) zu tun bitte in den VB.Net Bereich verschieben!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Thias“ ()

    @Eierlein

    Dass die Reihenfolge der Koordinaten umgestellt werden soll (Punktcode) - dies hat Du mitbekommen?

    Da nutzt es leider wenig, nur die Leerzeichen zu ersetzen und das Komma einzufügen - sondern zuerst müssen die einzelnen Koordianten ermittelt und dann wieder zusammengesetzt werden.

    Das Zusammensetzen des Strings wird @cheesy1892 aber sicherlich hinbekommen.
    Moin,

    zunächst solltest Du mal Deine Controls alle richtig benennen und die EventHandler auch. ;)

    cheesy1892 schrieb:

    OpenFileDialog1.ShowDialog()
    Das gibt Dir ein DialogResult zurück, das Du prüfen solltest. Wenn ich da nun "Abbrechen" drücke, dann wird trotzdem weitergemacht.

    cheesy1892 schrieb:

    TextBox1.Text = My.Computer.FileSystem.ReadAllText(Label1.Text)

    cheesy1892 schrieb:

    My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName + "txt",
    TextBox1.Text, False)
    System.IO.File benutzen, da der My-Namespace böse ist (außer die Ressourcen).

    Außerdem werden Strings per ​& verknüpft, nicht ​+. Wenn nötig, Option Strict auf On schalten!
    Das brauchst Du allerdings gar nicht, wenn ich mich recht erinnere. Die Extension ist automatisch da.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Danke das war schonmal sehr hilfreich.

    Habe noch 2 Problemchen
    Jetzt ist es so das die Kommas immer an der selben stelle stehen müssen und die Koordiaten die Punktnummer und der code mal mehr und mal weniger zeichen enthalten können.

    und mein Programm führt die anweisen immer nur für die erste Zeile aus meine Datei hat dennoch x belibig viele zeilen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. OpenFileDialog1.ShowDialog()
    4. Label1.Text = OpenFileDialog1.FileName
    5. TextBox1.Text = My.Computer.FileSystem.ReadAllText(Label1.Text)
    6. End Sub
    7. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    8. SaveFileDialog1.ShowDialog()
    9. My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName,
    10. TextBox1.Text, False)
    11. End Sub
    12. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    13. Dim Koordinaten As String() = TextBox1.Text.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
    14. Dim Punktnummer As String = Koordinaten(0)
    15. Dim PunktCode As String = Koordinaten(1)
    16. Dim rechtswert As String = Koordinaten(2)
    17. Dim hochwert As String = Koordinaten(3)
    18. Dim hoehe As String = Koordinaten(4)
    19. Dim fsa As String = Punktnummer + " , " + rechtswert + " , " + hochwert + " , " + hoehe + " , " + PunktCode
    20. TextBox1.Text = fsa
    21. End Sub
    22. End Class

    cheesy1892 schrieb:

    Habe noch 2 Problemchen
    Mindestens ein weiteres:
    Du liest nicht, was Dir geschrieben wurde
    oder
    Du verstehst nicht, was Du gelesen hast
    oder
    Du setzt nicht um, was da steht:

    Trade schrieb:

    cheesy1892 schrieb:

    OpenFileDialog1.ShowDialog()
    Das gibt Dir ein DialogResult zurück, das Du prüfen solltest. Wenn ich da nun "Abbrechen" drücke, dann wird trotzdem weitergemacht.
    Auch wenn dieser wichtige Hinweis nicht unmittelbar hilft, Dein primäres Problem zu lösen, wirst Du doch sofort eine Frage stellen, warum Dir Dein Programm um die Ohren fliegt mit diesem Fehler:
    Ein Ausnahmefehler des Typs "System.ArgumentException" ist in mscorlib.dll aufgetreten.
    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!
    @RodFromGermany - Du bist ja immer sehr hilfreich und hilfsbereit - aber Du glaubst doch nicht im ernst, dass @cheesy1892 innerhalb von 20 Minuten all Deine Änderungsvorstellungen umsetzen kann - hat wahrscheinlich nur meinen Post gesehen, das Programm erweitert und dann den Code gepostet - der diesmal korrekt formatiert war - dies schafft auch nicht jeder beim 2. Post!

    Dies was Du erwartest dauert normalerweise für einen Anfänger jenachdem Stunden oder sogar Tage (für Dich evtl. nicht mehr nachvollziehbar) um dies aufzunehmen, zu verstehen und umzusetzen - es sei denn jemand ist ein Überflieger - der stellt aber dann von vornherein nicht diese Fragen.

    Ansonsten wie @RodFromGermany schon schrieb, bitte das "&" benutzen (damit kannst Du z.B. auch String-Variablen und Integer-Variablen miteinander verknüpfen, wohingegen das "+" dies nicht kann!):

    VB.NET-Quellcode

    1. Dim fsa As String = Punktnummer & " , " & rechtswert & " , " & hochwert & " , " & hoehe & " , " & PunktCode


    @cheesy1892 - der Post wird gleich noch editiert bzgl. Deiner anderen Fragen - so denke nun bin ich fertig - aber dies weiß ich nie so genau, ob mir nicht doch noch etwas einfällt und ich editiere

    1. Variable Länge von Punktnummer und Punktcode - Du kannst mit "Leerzeichen" auffüllen - falls die "Leerzeichen" nicht "rechts" angefügt werde sollen, sondern stattdessen "links" dann nimm stattdessen "PadLeft".

    VB.NET-Quellcode

    1. Dim Punktnummer As String = Koordinaten(0).PadRight(6)
    2. Dim PunktCode As String = Koordinaten(1).PadRight(5)

    Oder Du kannst auch folgendes verwenden, falls Du eine "0" vorne dran zum Auffüllen setzen willst:

    VB.NET-Quellcode

    1. Dim Punktnummer As String = Koordinaten(0).PadLeft(6, "0"c)

    2. Mehrere Zeilen

    a) Als erstes musst Deine Textbox1 Multiline-fähig werden, damit diese überhaupt mehrere Zeilen vernünftig aufnehmen kann! Dies kannst Du im Desinger einstellen!
    Auf TextBox1 clicken - dann auf das Pfeilsysmbol - dann MultiLine auswählen. Oder im Eigenschafts-Fenster der Textbox1 "Multiline" auf "True" setzen!

    b) In der Sub "Button3_Click" dann folgendes:

    VB.NET-Quellcode

    1. Dim fsa As String = ""
    2. For Each Line In TextBox1.Lines
    3. Dim Koordinaten As String() = Line.Split({" "}, StringSplitOptions.RemoveEmptyEntries) ' Zeile editiert!
    4. Dim Punktnummer As String = Koordinaten(0).PadRight(6)
    5. Dim PunktCode As String = Koordinaten(1).PadRight(5)
    6. Dim rechtswert As String = Koordinaten(2)
    7. Dim hochwert As String = Koordinaten(3)
    8. Dim hoehe As String = Koordinaten(4)
    9. fsa = fsa & Punktnummer & " , " & rechtswert & " , " & hochwert & " , " & hoehe & " , " & PunktCode & Environment.NewLine
    10. Next
    11. TextBox1.Text = fsa

    3. Alle Punkte die @RodFromGermany angesprochen hat genauer betrachten und demenstsprechend abändern!

    Dieser Beitrag wurde bereits 27 mal editiert, zuletzt von „Thias“ ()