Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Buchstaben hochzählen (https://www.delphipraxis.net/73878-buchstaben-hochzaehlen.html)

Catbytes 25. Jul 2006 09:06


Buchstaben hochzählen
 
Hallo,

irgendwie hänge ich gerade.

Ich suche nach einer Funktion, die mir die Buchstaben "hochzählt"; also erst "A", dann "B" etc. Wenn "Z" ereicht ist, soll es mit "AA" weitergehen (so ungefähr wie in Excel).

"A"+1 geht ja nicht. Gibt es da andere Möglichkeiten?

Christian Seehase 25. Jul 2006 09:07

Re: Buchstaben hochzählen
 
Moin Catbytes,

was hältst Du von ord('A')+1 ?

RavenIV 25. Jul 2006 09:14

Re: Buchstaben hochzählen
 
da im ASCII-Code die Buchstaben sinnvollerweise alle hintereinander angeordnet sind, könntest Du damit was anfangen.
"A" liegt bei dezimal 65 und "Z" bei dezimal 90.

Du kannst Dir also eine Schleife bauen, die nacheinander die ASCII-Zeichen von 65 - 90 ausgibt.

Ein klein wenig Hirnschmalz und Delphi-Hilfe und DelphiPraxis-Suche könnte Dir weiterhelfen...

faux 25. Jul 2006 17:51

Re: Buchstaben hochzählen
 
Zitat:

Zitat von Christian Seehase
was hältst Du von ord('A')+1 ?

Einfacher gehts mit Succ('A'). ;)

Grüße
Faux

marabu 25. Jul 2006 19:43

Re: Buchstaben hochzählen
 
Hallo Catbytes,

ich erinnere mich noch an diesen thread: Kundennummer aus Buchstaben und Zahlen erstellen - da bist auch du abgebildet.

Grüße vom marabu

Masterof 25. Jul 2006 19:50

Re: Buchstaben hochzählen
 
ich hätte es auch über die ASCII Werte gemacht

s03 26. Jul 2006 07:53

Re: Buchstaben hochzählen
 
Wird vielleicht so was gesucht (?):

Delphi-Quellcode:
//NumberToLiteralNumber
function NumToLitNum(n:Int64):string;
//n=0-a,1-b,25-z,26-aa,27-ab,...
const
  cLiteralCount=26;
  function GetLiteral(z:Integer):string;
  begin
    result:=Chr(65+z);
  end;
var
  i:Integer;
begin
  result:='';
  While n>=cLiteralCount do begin
    i:=n div cLiteralCount;
    result:=GetLiteral(n-(i*cLiteralCount))+result;
    n:=i-1;
  end;
  result:=GetLiteral(n)+result;
end;

marabu 28. Jul 2006 07:13

Re: Buchstaben hochzählen
 
Herzlich willkommen in der Delphi-PRAXiS, s03.

Dein Code funktioniert gut, allerdings würde ich ihn so implementieren:

Delphi-Quellcode:
// return Excel column name for zero based column index

function IndexToName(n: Word): String;
begin
  Result := '';
  repeat
    Result := Chr(Ord('A') + n mod 26 - Ord(Result <> '')) + Result;
    n := n div 26;
  until n = 0;
end;
Mehr als 64K Spalten erwarte ich nicht.

Freundliche Grüße vom marabu

s03 28. Jul 2006 09:16

Re: Buchstaben hochzählen
 
Hallo

Ja, sieht interessant aus :-). Zwar verstehe ich was da passiert, befürchte aber, dass ich selber zu solchen Kunststückchen nicht fähig bin (außer ich trimme darauf).
Was int64 betrieft, habe ich mich nicht ganz auf den Excel konzentriert. Vielleicht möchte jemand einfach eine 18 (oder 19) stellige IntZahl zu einem Buchstabensalat umwandeln. Für Excel würde in 98% der Fälle byte ausreichen. Na ja, wie dem auch sei :-).
Danke für den schlanken Code :-).


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