Die Funktion
InvertQualifierName wandelt einen String, der aus durch einen
Delimiter begrenzten Teilen besteht und so eine hierarchische Struktur beschreibt, so um, dass der von ihm beschriebene Pfad innerhalb der Hierarchie "rückwärts" dargestellt wird.
Delphi-Quellcode:
uses
StrUtils; // PosEx, AnsiEndsStr
function InvertQualifierName(const AName: string;
const ADelimiter: string='.'): string;
var
myStart: Integer;
myEnd: Integer;
begin
Result:= '';
myStart:= 1;
repeat
// get position of next delimiter
myEnd:= PosEx(ADelimiter, AName, myStart);
// copy whole trail if no more delimiters available
if myEnd<=0 then
myEnd:= Succ(Length(AName));
// dont append a delimiter at first item
if myStart>1 then
Result:= ADelimiter+Result;
// append actual item
Result:= Copy(AName, myStart, myEnd-myStart)+Result;
// go on scanning from behind the last delimiter
myStart:= Succ(myEnd);
until myStart>Length(AName);
// dont forget the potential last delimiter
if AnsiEndsStr(ADelimiter, AName) then
Result:= ADelimiter+Result;
end;
Die Ausgabe dieses Abschnitts
Delphi-Quellcode:
WriteLn(InvertQualifierName('Borland.Win32.Windows'));
WriteLn(InvertQualifierName('Borland.VCL.Controls.TControl'));
WriteLn(InvertQualifierName('MyUnit.TControl'));
WriteLn(InvertQualifierName('TControl'));
WriteLn;
WriteLn(InvertQualifierName('a-weird-name-', '-'));
WriteLn(InvertQualifierName('spaces as delimiter', ' '));
WriteLn(InvertQualifierName('/Another/Weird/Name', '/'));
WriteLn(InvertQualifierName('\Last\Weird\Name\', '\'));
sieht dann in der Console wie folgt aus:
Code:
Windows.Win32.Borland
TControl.Controls.VCL.Borland
TControl.MyUnit
TControl
-name-weird-a
delimiter as spaces
Name/Weird/Another/
\Name\Weird\Last\