RTrim beim Auslesen von Char-Variablen

  • VB.NET

Es gibt 62 Antworten in diesem Thema. Der letzte Beitrag () ist von jen.

    RTrim beim Auslesen von Char-Variablen

    Hallo,

    mein Problem ist Folgendes:

    Ich lese aus einer SPS eine Char Variable aus, welche ich als Text in einem Radio-Button anzeige.
    Diese Char Variable besteht aus 44 Zeichen, welche als Standardwert Leerzeichen enthält. Also habe ich z.B. einen 10 Zeichen langen Text und der Rest des Char Arrays besteht aus Leerzeichen.
    Ich möchte diesen 'RadioButton.Text' in einer Textbox anzeigen + davor eine Nummer stellen. Und da ich den Text in dieser Textbox zentriert anzeigen möchte, zwecks der Optik, verschiebt sich der Text durch die darauffolgenden Leerzeichen leider immer.

    Ich habe diese beiden Möglichkeiten ausprobiert, jedoch leider ohne Erfolg:

    VB.NET-Quellcode

    1. Dim AnzeigeText As String = RTrim(RadioButton1.Text)
    2. TextBox1.Text = (Nummer & ": " & AnzeigeText)


    VB.NET-Quellcode

    1. TextBox1.Text = RTrim(Nummer & ": " & RadioButton1.Text)


    Zum Testen habe ich mal einen fixen String deklariert, und so funktioniert es...also wäre der Ansatz doch eigenlich richtig, oder nicht?

    VB.NET-Quellcode

    1. Dim AnzeigeText As String = RTrim("Das ist ein Test. ")
    2. TextBox1.Text = AnzeigeText


    Vielen Dank schon mal im Voraus :)
    Stell die Textbox Property TextAlign einfach auf Center.
    Eventuell ist auch die Trim Methode (welche an beiden Enden die Leerzeichen entfernt) für dich intresannt.

    VB.NET-Quellcode

    1. Dim AnzeigeText As String = "Das ist ein Test. ".Trim
    2. TextBox1.Text = AnzeigeText


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    Stell die Textbox Property TextAlign einfach auf Center.

    Die ist auf Center, dadurch, dass nur hinten noch die ganzen Leerzeichen sind, verschiebt sich nur alles, so dass es nicht mehr wirklich 'center' ist ;)

    fichz schrieb:

    Eventuell ist auch die Trim Methode (welche an beiden Enden die Leerzeichen entfernt) für dich intresannt.

    Habe ich auch schon versucht...gleiches Ergebnis...also leider gar nix.

    Und wenn ich eben einen String Text selbst eingebe, funktioniert es sowieso, das Problem ist nur mir der ausgelesenen Char-Variable ?(
    Wie behandelst Du diese

    jen schrieb:

    Char-Variable
    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!
    Das sieht mir etwas daneben aus. res ist wohl ein Byte-Array mit den gelesenen Zeichen. Dies müsstest Du so in einen String konvertieren:

    VB.NET-Quellcode

    1. Dim res() As Byte = {32, 33, 34, 35, 36}
    2. Dim txt As String = Encoding.UTF8.GetString(res) ' hier statt UTF8 Deine Codierung verwenden
    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!
    Erst mal, Danke für die Hilfe! :)

    Ich habe meine bisherigen Infos zum Thema libnodave aus SPS Foren und hier wurde res immer als Integer deklariert.

    VB.NET-Quellcode

    1. Public res As Integer


    Außerdem habe ich das so schon öfter verwendet (ebenso wie andere SPS Foren User) und es hat immer gut funktioniert, deshalb liegt der Fehler denke ich nicht hier.
    Denn ich habe diesen Code in ähnlicher Form bereits direkt für Textboxen verwendet, und damals hat das, mit dem Leerzeichen abschneiden auch prima geklappt... ?(
    @jen: OK. Welche Bedeutung hat dieser Wert?
    Anzahl der gelesenen Bytes?
    Dann solltest Du ihn in der Schleife verwenden.
    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!
    ?( wenn ich das in einer MsgBox ausgebe, erhalte ich als Wert immer 0, also handelt es sich wohl nicht um die Anzahl der gelesenen Byte.

    mit diesem Befehl liest man dann den Wert aus der SPS aus:

    VB.NET-Quellcode

    1. dc.getU8

    VB.NET-Quellcode

    1. dc.getS8
    2. 'z.B für Integer Zahlen zum Auslesen


    Wie das alles im Hintergrund funktioniert weiß ich leider nicht, hat sonst mit etwas Hilfe eigentlich immer gut geklappt, und deshalb habe ich mich mit dem 'WARUM' eigentlich nicht wirklich beschäftigt...
    @RodFromGermany

    mit folgendem Code, kann ich den Inhalt der in diesem Char-Array stehenden Werte auslesen:

    VB.NET-Quellcode

    1. res = dc.readBytes(libnodave.daveDB,DB_Nr, Adresse, Länge, buf)
    2. For j = 0 To 43
    3. RadioButton1.Text += Chr(dc.getU8)
    4. Next


    also gibt jedes dc.getU8 einen Buchstaben aus.

    jen schrieb:

    also gibt jedes dc.getU8 einen Buchstaben aus.
    Bei mehreren Zeichen - Welches?
    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 schrieb:

    Bei mehreren Zeichen - Welches?
    Woher kommt die richtige Reihenfolge?
    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!
    dc bekommt nicht gesagt, welches Zeichen Du lesen willst.
    Was ist, wenn Du nur jedes 2. Zeichen lesen willst?
    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!
    Aso, aber ich will jedes Zeichen lesen. Der Text steht in der Char-Variable ja auch nicht so: 'D a s i s t e i n T e s t' sondern 'Das ist ein Test'.
    Warum? Könnte das etwas damit zum Tun haben? Aber ich kann die Anzahl der Zeichen die ich auslese nicht begrenzen, da sich diese ändern können.

    jen schrieb:

    Warum?
    Ich versuche zu verstehen, wie Deine DLL funktioniert, um Dir helfen zu können.
    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!
    Ok, und noch einmal DANKE!!

    Aber ich verstehe leider nicht, was das mit der Reihenfolge zum tun hat? Könnte es vielleicht daran liegen? Aber warum hatte ich dann bei der Textbox keine Probleme die Leerzeichen 'wegzuschneiden'? ?(

    jen schrieb:

    'wegzuschneiden'
    Probier mal diesen Code und schreib, was passiert (vorn und hinten die Leerzeichen abschneiden, innen durch Unterstrich ersetzen):

    VB.NET-Quellcode

    1. Dim txt = ""
    2. For j = 0 To 43
    3. txt &= Chr(dc.getU8)
    4. Next
    5. RadioButton1.Text = txt.Trim.Replace(" ", "_")
    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!