Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konvertierung : String -> Copy -> Char -> Integer - Problem (https://www.delphipraxis.net/137235-konvertierung-string-copy-char-integer-problem.html)

Real-TTX 16. Jul 2009 21:55


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:
  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 ...
Gibt es da noch ein Trick ?

Gruß, Real-TTX

himitsu 16. Jul 2009 22:01

Re: Konvertierung : String -> Copy -> Char -> Integ
 
Delphi-Quellcode:
// statt
Ord(UpperCase(Copy(adoQuery['Name'] - 65, 0, 1)))

// eher
Ord(UpperCase(adoQuery['Name'])[1]) - 65
adoQuery['Name'] - 65 wäre eh nicht gegangen ... bestimmt auch nicht "richtig" in C,
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)

Real-TTX 16. Jul 2009 22:07

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

himitsu 16. Jul 2009 22:37

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 15:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz