C# TextBox Jeden Wert auslesen

PeterParty

Lt. Junior Grade
Registriert
Aug. 2008
Beiträge
282
Nabend,

Ich möchte in C# jeden wert einer Texbox nacheinader auslesen...

d.H:

z.B Textbox1 Inhalt ist : Hallo
Jetzt möchte ich jeden Wert in eine Zahl Umwandeln.

Textbox 2 soll dan stehen : 82121215

Quasi vom Alphabet in Zahlen umgewandelt.

Gibt es da eine Möglichkeit ?

Mfg
Peter
 
Klar gibts da ne Möglichkeit.
Text aus Textbox 1 einlesen, Zeichen für Zeichen durchwandern und den jeweiligen ASCII Wert in die Textbox 2 schreiben.
 
Natürlich gibt es da eine Möglichkeit, wahrscheinlich sogar mehrere ;-)

Nur derzeit weiß ich noch nicht, wie du "Hallo" in "82121215" umwandelst, ergit für mich noch keinen Sinn, da es weder die ASCII Codes sind, noch irgendwie sinnvoll zerlegbar wäre, außer du willst dass H = 8, a = 2, l= 12 und o = 15 ist?

Willst du ASCII Codes, dann ist es mit dieser foreach auch schon getan:

Code:
foreach (byte b in ASCIIEncoding.ASCII.GetBytes(textBox1.Text))
{
    textBox2.Text += b.ToString();
}
 
Zuletzt bearbeitet:
Hi,
eigentlich wollte ich das so:

H = 8, a = 2, l= 12 und o = 15 ist...

Weil der ASCII zahelncode ist mir zu lang...

Mfg

Peter
 
Also willst du keine Unterscheidung treffen zwischen Groß- und Kleinbuchstaben?

Dann kannst du einfach den gewünschten Betrag vom ASCII-Wert abziehen, damit du auf deine Werte kommst

Code:
foreach (byte b in ASCIIEncoding.ASCII.GetBytes(textBox1.Text).Select(b=> b <= 90 ? b-65 : b-97))
{
    textBox2.Text += b.ToString();
}

oder in Langform:
Code:
foreach (byte b in ASCIIEncoding.ASCII.GetBytes(textBox1.Text))
{
    if (b <= 90)
    {
        textBox2.Text += (b - 65).ToString();
    }
    else
    {
        textBox2.Text += (b - 97).ToString();
    }
}

Somit steht dann A bei 0 und Z bei 25. Wohlgemerkt nur bei Standardzeichen. Umlaute oder Satzzeichen werden irgendetwas.

Eine weitere Möglichkeit wäre ein Dictionary mit den char als Schlüssel und byte als Werte anzulegen, und danach einfach den byte-Wert abzufragen.

Code:
Dictionary<char, byte> mapping = new Dictionary<char, byte>();
mapping.Add('a', 0);
mapping.Add('A', 0);
[...]

foreach (char c in textBox1.Text.ToCharArray())
{
    textBox2.Text += mapping[c].ToString();
}

Oder eine Switch Anweisung:
Code:
foreach (char c in textBox1.Text.ToCharArray())
{
    switch (c)
    {
        case 'a':
        case 'A':
            textBox2.Text += "0";
            break;
            [...]
    }
}
 
wenn dann muss esw 8 1 12 12 15 sein ;)

Hier mal meine Lösung:

Code:
foreach (Char c in textBox1.Text.ToLower().ToCharArray())
    textBox2.Text += 1 + (c - 'a');

Zur Erklärung:
Ich nehme den String als ein Feld (Array) von Charaktern und gehe jeden Char einzeln durch.
Damit ich nicht zwischen Groß- und Kleinschreibung unterscheiden muss, wandle ich alle Buchstaben in Kleinbuchstaben um (wird durch die ToLower()-Methode gemacht)

Nun zu dem inneren der foreach-Schleife:
Dazu muss man verstehen, wie ein Character im Speicher hinterlegt wird.
Im Prinzip hndelt es sich um einen 8-bit Integer Wert der den ASCII-Code des jeweiligen Zeichens beinhaltet.
Das bedeutet, ein "a" wird nicht als "a" gespeichert sondern als 97, da die 97 im ASCII-Code dem a entspricht.

Damit erreiche ich durch "(c-'a')", dass der ASCII-Code von a (97) von dem ASCII-Code des aktuellen Zeichens (a=97, b=98, .. z=122) abgezogen wird.
Warum ich noch 1 addiere sollte dann auch klar sein ;)

Hier nochmal eine kleine Übersicht zur Funktionsweise:
Code:
H -> h -> ('h'-'a') -> (104-97) ->  7
a -> a -> ('a'-'a') ->  (97-97) ->  0
l -> l -> ('l'-'a') -> (108-97) -> 11
l -> l -> ('l'-'a') -> (108-97) -> 11
o -> o -> ('o'-'a') -> (111-97) -> 14

Vielleicht fragst du dich, warum aus dem Char einfach so ein Integer wird, das liegt daran, weil das Ergebnis einer arithmetischen Operation auf ein Char immer einen Intger ergibt, da ja zum Berechnen die ASCII-Codes (Integer) verwendet werden. ;)

Hoffe ich konnte dir damit weiterhelfen ^^
 
Morgen,
Danke genau so wollte ich das haben....

Mfg
Peter
Ergänzung ()

Achso ich hätte noch eine frage...

Kann mit dem StreamReader auf dateien Zugreifen die im Netz liegen ?

So nach dem Motto:

Code:
 StreamWriter writer = new StreamWriter("http://109.230.210.XXX/Konfiguration.ini", true, System.Text.Encoding.Default);


Mfg
Peter
 
Zurück
Oben