Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Textformatierung

  Alt 18. Apr 2007, 13:00
Hi und erstmal Herzlich Willkommen in der DP

Was mkinzler schon gezeigt hat, prinzipiell kannst Du Dir einen String immer wie ein Array (dynamischer Größe) von einzelnen Zeichen vorstellen. Ein solches Array hat eine bestimmte Länge, die mit length ermittelt werden kann. Damit der gezeigte Code funktioniert musst Du natürlich noch einen Startwert für i mit angeben. Das erste Zeichen findest Du bei Strings dabei an der Stelle 1 (bei anderen dyn. Arrays wäre es die 0).

Die wichtigsten String-Funktionen findest Du in den Units SysUtils und StrUtils (in der OH findest Du eine Liste aller Funktionen). Die Funktionen lassen sich leicht über den Namen finden (rate mal was UpperCase macht).
Möchtest Du einen String "per Hand" spiegeln (es gibt schon eine Funktion, die das kann), dann wirst Du wahrscheinlich den original String Zeichen für Zeichen durchgehen und an die entsprechende Stelle in einen anderen (neuen) String einfügen, der dann das inverse darstellt. Dabei musst Du aber eine Sache beachten, man kann nur auf die Stellen im Speicher zugreifen, die bereits für den Zugriff reserviert wurden. Bei Strings passiert das ganz im Hintergrund, ein
var s, s2: String; reserviert noch keinen Speicher, der String ist nur ein Zeiger auf den leeren String. Bei der Verwendung
s := 'Hallo'; wird im Hintergrund einfach Speicher für Dich reserviert und dann der Wert des statischen String ('Hallo') in diesen Speicher kopiert. Möchtest Du jetzt auf einen zweiten String (s2) zugreifen und hier an der letzten Stelle ein 'H' hinschreiben, dann hast Du das Problem, dass für s2 noch gar kein Speicher reserviert wurde. Dies kannst Du mit der Funktion setLength nachholen (und müsstest Du machen, bevor Du auf den Speicher zugreifen kannst)
Delphi-Quellcode:
// würde hier noch zu Fehler führen
s2[5] := 'H';

// reservieren von Speicher
setLength(s2, 5);
// jetzt klappt's auch!
s2[5] := 'H';
setLength musst Du natürlich nur einmal aufrufen, wenn Du eine neue Größe möchtest, danach hat der übergebene String die richtige Größe.

Gruß Der Unwissende
  Mit Zitat antworten Zitat