![]() |
Konvertierung : String -> Copy -> Char -> Integer -
Hi Jungs,
Ich habe ein Problem beim arbeiten mit chars. In C kann ich den char einfach als "int" benutzen und als char ausgeben.... In Delphi ist das ganze nicht so einfach wie ich sehe.... Hier Mein Codeschnippsel wie ich dachte das zu machen... aber auch nach einiger Zeit googlen bin ich nicht weiter...
Delphi-Quellcode:
Gibt es da noch ein Trick ?
adoQuery := objDatabase.SQLExecSelect('SELECT * FROM Series');
for i := 1 to 26 do // Hier gehe ich das Alphabet durch. Hier erstelle ich Nodes von "A" bis "Z" begin // Element 0 ist für Zahlen vorgesehen achar := Chr(64 + i); Nodes[i] := TreeView.Items.Add(nil,achar); // Nodes ist nur ein TTreeNode Array end; while not adoQuery.Eof do // Hier möchte ich die Sachen einordnen begin // Hier ist mein Problem..... TreeView.Items.AddChild(Nodes[Ord(UpperCase(Copy(adoQuery['Name']-65,0,1)))],adoQuery['Name']); adoQuery.Next; end; ...... // Kurze erklärung: Copy(adoQuery['Name'],0,1) // <-- Erstes Zeichen als String UpperCase(x) // <-- Zeichen umformatieren als Großzeichen (A: sollte den Int-Wert haben von 65) Ord(x) // <-- Hier sollte es theoretisch 65 sein Nodes[x-65] // <-- Und hier zurückrechnen auf das Element von einem TTreeNode Array (-65) somit ist es bei A die 1 ... Gruß, Real-TTX |
Re: Konvertierung : String -> Copy -> Char -> Integ
Delphi-Quellcode:
adoQuery['Name'] - 65 wäre eh nicht gegangen ... bestimmt auch nicht "richtig" in C,
// statt
Ord(UpperCase(Copy(adoQuery['Name'] - 65, 0, 1))) // eher Ord(UpperCase(adoQuery['Name'])[1]) - 65 denn String - Int außerdem ist Copy(s, 0, 1) falsch, da die Indizierung bei 1 beginnt, also richtiger wäre Copy(s, 1, 1) |
Re: Konvertierung : String -> Copy -> Char -> Integ
Ahh.. habs auch gerade gemerkt :(
Aber danke dir :) Aber das mit dem Copy kann so nicht stimmen. Ich habe es mit copy(str,0,1) und funktioniert wie ich wollte? Oder verstehe ich da was nicht richtig.... Gruß, Real-TTX |
Re: Konvertierung : String -> Copy -> Char -> Integ
das liegt daran, daß an dieser Stelle "leider" aufgerundet wird.
Probleme wirst du bekommen, wenn du mit Copy(s, 1, 1) versuchen würdest auf das 2. Zeichen zuzugreifen und wiederum das Erste erhalten tätest. in Delphi sind alle Strings mit 1 beginnend indiziert, welches am uralten ShortString liegt, der an Position 0 das Längen-Byte liegen hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz