Machts doch nicht so kompliziert! Einfach den ursprünglichen String in einem bestimmten Abstand (hier: 5) durch-'hüpfen' und einen neuen String zusammenbauen, dann die Anfangsposition um 1 erhöhen und die nächsten 5er-Abstände holen...
So etwa:
Delphi-Quellcode:
function PolyAlphaCode(AString: string; AWidth: integer = 5): string;
var
i, pos: integer;
begin
(* evtl. "fehlende" Leerzeichen anhängen *)
while Length(AString) mod AWidth > 0 do
AString:=AString+' ';
(* den gewünschten Zeichenabstand durchlaufen *)
for i:=0 to AWidth-1 do
begin
(* mit erstem Zeichen der Folge anfangen *)
pos:=1;
while pos+i <= Length(AString) do
begin
(* codierten String zusammenbauen *)
Result:=Result+AString[i+pos];
Inc(pos, AWidth);
end;
end;
end;
function PolyAlphaDecode(AString: string; AWidth: integer = 5): string;
begin
(* aus Breite wird Höhe + überzählige Leerzeichen am Ende entfernen *)
Result:=Trim(PolyAlphaCode(AString, Length(AString) div AWidth));
end;