Zeichenfolge ins Integer konvertieren

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von kuno_sd.

    Zeichenfolge ins Integer konvertieren

    Hallo zusammen!
    habe solche Frage. ich habe ein String in dem Datum als Zeichenfolge gespeichert ist. (z.B. 23.11.2010) Ich möchte diese Zeichenfolge in einem Arrey von Intager speichern. Das bedeutet aus der Zeichenfolge "23.11.2010" mochte ich Arrey von Integer Arr(0) = 2, Arr(1)=3, Arr(2)=1, Arr(3)=1 haben. ?(

    VB.NET-Quellcode

    1. Dim zahlen As List(Of Integer)
    2. For each c As Char in "23.11.2010"'Durchläuft den String...
    3. If Not c = "."c Then 'überprüft ob es auch kein Punkt ist^^
    4. Dim zahl As Integer = -1
    5. If Integer.TryParse(c,zahl) Then'Integer konvertieren
    6. zahlen.Add(zahl) ' zahl zur Liste hinzufügen
    7. End If
    8. End If
    9. Next
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Zum Beispiel so:

    VB.NET-Quellcode

    1. Dim DeinString As String = "23.11.2010" 'Dein String mit dem Datum
    2. DeinString = DeinString.Replace(".", "") 'Die Punkte entfernen
    3. 'DeinString=Mid(DeinString,1,4) 'Wenn du nur die ersten vier Stellen willst
    4. Dim Arr(Len(DeinString)) As Integer 'Ein Array mit der länge des Strings dimensionieren
    5. Dim StartPosition, Zeichenanzahl As Integer
    6. StartPosition = 1
    7. Zeichenanzahl = 1
    8. Arr(0) = Int(Mid(DeinString, StartPosition, Zeichenanzahl)) 'Hole als Integerwert von Startposition 1 Zeichen aus dem String
    9. Arr(1) = Int(Mid(DeinString, StartPosition + 1, Zeichenanzahl))
    10. Arr(2) = Int(Mid(DeinString, StartPosition + 2, Zeichenanzahl))
    11. Arr(3) = Int(Mid(DeinString, StartPosition + 3, Zeichenanzahl))
    12. TextBox1.Text = Arr(0) & Arr(1) & Arr(2) & Arr(3)
    'Nur so[/code]

    Nu aber...

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Unwesen“ ()

    ...ganz zu schweigen von den grauenvollen VB 6-Relikten :grünersmileydergradkotzt:
    An Sonsten

    VB.NET-Quellcode

    1. Dim res As New LIst(Of Integer)
    2. Dim tmp As Integer
    3. For Each c As Char In s
    4. If Integer.TryParse(c, tmp) Then res.Add(tmp)
    5. Next
    6. Return res.ToArray()


    ich hab's mal ein wenig optimiert.
    Grauenvoll? Die lassen aber eher darauf schließen, was das Programm gerade macht, finde ich. Ich tue mich schon etwas schwer, den Einstieg in VB.NET zu finden, also schreib ich es im Zweifelsfall lieber so.. Ich finde VB2010 in mancher Hinsicht nicht so einfach, was aber schon daran liegen mag, das ich einige Jahre nichts mehr mit Programmierung am Hut hatte. :sleeping:

    Naja, irgendwann werd ich mich mal zu 'ner Bücherei bewegen und dort mal ein paar geeignete Bücher ausleihen. Zur Zeit habe ich halt nur diverse VB6 PDF's und einige Bücher, die sich mit VB2010 aber recht oft als wenig hilfreich erweisen. X(

    Und falsch ist meine Lösung ja deswegen nicht, etwas langatmig eventuell, aber dafür werden die einzelnen Schritte eher deutlich.. Habe schließlich meine allerersten Programmiererfahrungen auf dem c64 gemacht, indem ich Assembler Mnemonics in den Maschinensprachemonitor meiner FC3 gehämmert hab, daher neige ich gelegentlich etwas dazu, den Code in kleine Häppchen zu portionieren. :D
    Du benutzt Sachen wie Mid() statt String.Substring().
    Das ist:
    1. Grauenhafter Stil
    2. Von 1998 (VB 6 Relikt)
    3. SOwas von NICHT-OOP

    -Mal abegesehen davon, dass z.B. der 6-Zeiler vb jvbsl/ mir wesentlich eleganter ist, ist er auch noch viel schneller.

    Hier mal -zumindest von den Namespaces her- ein besserer Code, angelehnt an deinem:

    VB.NET-Quellcode

    1. Dim deinString As String = "23.11.2010" 'Dein String mit dem Datum ''Lokale Variable klein
    2. deinString = deinString.Replace(".", "") 'Die Punkte entfernen
    3. 'deinString = deinString.Substring(0,4) 'Wenn du nur die ersten vier Stellen willst
    4. Dim arr(deinString.Length - 1) As Integer 'Ein Array mit der länge des Strings dimensionieren ''NULLBASIERT, also -1
    5. For i = 0 To deinString.Length - 1 ''Nein, wir schreiben keine 1000 Zeilen, wenn wir ein Array mit 1000 Zeilen füllen wollen
    6. arr(i) = CInt(deinString.Chars(i)) ''Nanü, Substrings der länge 1 sind einfach Direktzugriffe auf die Chars
    7. Next
    8. txtOutput.Text = arr(0) & arr(1) & arr(2) & arr(3) ''Ja, auch Controls haben anständige Namen verdient, vom Rest ganz zu schweigen...



    Forumsinterne Resourcen, die dich interessiern könnten:
    [Allgemein] Entwickler-Ressourcen und Tools, Bücher und WebCasts
    [Allgemein] Grundlagen: Benennung von Controls (Update: 24.10.2010)
    [VB.NET] Beispiele für guten und schlechten Code (Stil)

    Galileo Openbooks - Die elektronische, kostenlose Bücherei - nur einen klick entfernt:
    Galileo Openbook VB.NET
    Galileo Openbook Einstieg in VB 2008
    Galileo Openbook Einstieg in VB 2010

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

    Hmjo..

    Deine Version mag ja richtig sein, vermutlich* sogar besser (*Da ich momentan nicht, ohne es auszuprobieren sagen kann, was dein Beispiel genau macht :whistling: ).

    Zugegeben, in meiner Antwort steckt nicht viel VB2010 Code. Am Resultat ändert sich dadurch aber jetzt nicht so sehr viel, oder? Also abgesehen von irgendwelchen Geschwindigkeitsfragen? Ich bezweifle aber, das der Fragesteller tatsächlich für sein aktuelles Vorhaben diesen Aspekt berücksichtigen muss.

    Aber gut, wenn meine Antwort so Grauenhaft ist, werde ich eben versuchen, den Wissenden nicht ihren wertvollen Platz zu stehlen und enthalte mich in Zukunft bei der Beantwortung von Fragen und verlege mich wieder aufs Fragen.

    Trotzdem noch danke für die Links, ich werde bei Gelegenheit mal reinsehen, wenn was nicht wie geplant läuft. :D

    //Edit
    -Mal abegesehen davon, dass z.B. der 6-Zeiler vb jvbsl/ mir wesentlich eleganter ist, ist er auch noch viel schneller.
    Jo, ist ja nicht so, dass die Antwort da schon stand, als mir den Tab zum Antworten aufgemacht habe. Da war nur der Beitrag von SystemUnknow, bis ich auf Absenden geklickt habe.user/9254-systemunknow/

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Unwesen“ ()