Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String zu AnsiChar oder Char umwandeln (https://www.delphipraxis.net/100343-string-zu-ansichar-oder-char-umwandeln.html)

rollstuhlfahrer 26. Sep 2007 18:23


String zu AnsiChar oder Char umwandeln
 
Hallo Wissende,

ich möchte die Zeichen von einem Memo-Feld von allen Zeichen den ASCII Wert ermitteln. Dafür hat Delphi die Funktion ord() vorgesehen. Diese kann man aber leider nicht mit einem String, sei es ein 1-Zeichen-String, füttern. Momentan bin ich soweit gekommen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  buchstabe, s: string;
  x, i, zeilen, zlaenge, zeichen: integer;
  temp: AnsiChar; // Kann auch Char sein
begin
zeilen := Memo1.Lines.Count;
for i := 0 to zeilen-1 do
  begin
  s := Memo1.Lines[i];
  zlaenge := Length(s) - 1;
  for x := 0 to zlaenge do
    begin
    buchstabe := System.Copy(s, x, 1);       // Aus dem String den einen bestimmten Buchstaben herauskopieren
    temp := Char(buchstabe);    // Hier haperts!!
    zeichen := ord(temp);
    showmessage(inttostr(zeichen));
    end;
  end;
end;
Nun ja, ich habe es noch nicht hinbekommen eine einfache Typenumwandlung dafür hinzubekommen.
Als Anmerkunk:

showmessage(IntToStr(ord('r'))); // zeigt den ASCII-Wert von r an

var zeichen: string
showmessage(IntToStr(ord(string))); // Inkompatible Typen (umwandlung??)


rollstuhlfahrer

PS: Eine Tabelle mit möglichst vielen Typenumwandlungen fehlt (mir)

xaromz 26. Sep 2007 18:30

Re: String zu AnsiChar oder Char umwandeln
 
Hallo,

wie wär's damit:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  i, j, zeilen, zlaenge: Integer;
  Zeichen: Byte;
begin
  zeilen := Memo1.Lines.Count;
  for i := 0 to zeilen - 1 do
  begin
    s := Memo1.Lines[i];
    zlaenge := Length(s);
    for j := 1 to zlaenge do
    begin
      Zeichen := Ord(s[j]); // <-- hier Umwandlung des j-ten Zeichens
      showmessage(IntToStr(Zeichen));
    end;
  end;
end;
Gruß
xaromz

DeddyH 26. Sep 2007 18:31

Re: String zu AnsiChar oder Char umwandeln
 
Hallo, ich habe Deinen Source mal etwas zusammengekürzt (ungetestet):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  buchstabe, s: string;
  x, i, zeilen, zlaenge, zeichen: integer;
  temp: AnsiChar; // Kann auch Char sein
begin
zeilen := Memo1.Lines.Count;
for i := 0 to zeilen-1 do
  begin
  s := Memo1.Lines[i];
//  zlaenge := Length(s) - 1;
  for x := 1 to Length(s) do
    begin
    //buchstabe := System.Copy(s, x, 1);       // Aus dem String den einen bestimmten Buchstaben herauskopieren
    //temp := Char(buchstabe);    // Hier haperts!!
    //zeichen := ord(temp);
    showmessage(inttostr(Ord(s[x])));
    end;
  end;
end;

Martin K 26. Sep 2007 18:38

Re: String zu AnsiChar oder Char umwandeln
 
Hallo,

ein String ist wie ein Array of Char aufgebaut, nur dass das erste Zeichen mit dem Index 1 beginnt.
Das erste Zeichen aus einem String bekommst du also so:
Delphi-Quellcode:
var s: String; c: Char;

  c := s[1];
Die Funktion Ord() benötigt als Argument einen ordinalen Typ, Char ist ein ordinaler Typ, String aber nicht.
ShowMessage(IntToStr(Ord(string[1]))) funktioniert also :wink:

Was du vor hast, könnte man auch einfach so machen (Kopieren und temporärer String wird überflüssig).
Delphi-Quellcode:
var temp: Char; zeichen: Byte;

for i := 1 to Length(s) do
begin
  temp := s[i];
  zeichen := Ord(temp);
  ShowMessage(IntToStr(zeichen));
end;
oder auch einfach:
Delphi-Quellcode:
for i := 1 to Length(s) do
  ShowMessage(IntToStr(Ord(s[i])));
Übrigens:
Char = AnsiChar

rollstuhlfahrer 27. Sep 2007 16:25

Re: String zu AnsiChar oder Char umwandeln
 
Vielen dank für die zahlreichen und schnellen Antworten.
Was ich nicht wusste ist, dass ein einfacher String ein Array aus Char darstellt. Damit wird das Leben etwas einfacher.

rollstuhlfahrer


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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