Projekt mit
1 €
unterstützen?
So geht das *:


Step 06 - Strings

Themen:

 

Aufbau von Strings (historische Bedeutung von s[0]?)

 

String ist ein Datentyp, welcher wie ein Array behandelt werden kann: Array of (Ansi)Char.

Strings in Delphi sind allerdings nicht wie in den meißten anderen Programmiersprachen behandelbar. In diesen wird bei s[0] das erste Zeichen zurückgegeben. Bei dem String in Delphi, der auch als "Pascal-String" bezeichnet werden kann, gibt s[1] das erste Zeichen zurück. Grund hierfür ist die Tatsache, dass früher bei s[0] die Länge des Strings herausgelesen werden konnte.

Beim früheren Pascal-String war hier auch die Limitierung auf 255 Zeichen pro String üblich. Heute gibt es quasi keine Grenze mehr, da delphi den String intern verwaltet.

Da Strings, wie wir nun wissen, wie Arrays genutz werden können, kann man auch die Länge des Strings vordefinieren.

var
  s : String[100];

Dies kann z.B. nützlich sein, wenn man Daten einer festen Größe in Dateien speichern möchte.

Genauso kann die Größe des Strings auch per SetLength-Befehl geändert werden:

//       Variable, Größe
SetLength( s     , 255);

Wichtig: Bei Delphi .Net wird der Pascal-String NICHT als Standard verwendet!

 


 

Methoden zum Herauskopieren, zur Positionssuche, zum Formatieren etc.

 

1. Einen "Substring" kopieren mit Copy:

// Aufbau:
// copy ( Variable, Startposition, Anzahl Zeichen)

// Einfaches Beispiel:
var
  s : String;
begin
  s := 'Sonnenblumenkerne';
  edDisplay.text := copy(s, 7, 5);
  // nun steht 'blume' im Edit edDisplay
  edDisplay2.Text := copy( s, 13, 100);
  // hier steht 'kerne' im Edit.
  // Dynamisch geht das ganze auch mit 
  // copy(s, x, Length(s));
  // wobei x irgendeine Startposition sein kann, 
  //  die auch mit der pos-funktion gefunden werden kann.
  // Length(s) siehe 5.
end;
Sollte einer der Werte für die Position oder die Länge außerhalb des Bereiches liegen, so wird ein leerer String zurückgegeben.

2. Position erhalten mit pos:

// Aufbau:
// pos ( Substring, Variable)

// Einfaches Beispiel:
var
  s : String;
begin
  s := 'Sonnenblumenkerne';
  if pos('blume', s) > 0 then
    edResultFlower.Text := 'enthalten'
  else
    edResultFlower.Text := 'nicht enthalten';
  // in edResultFlower 
  edPosition.Text := IntToStr( pos( 'Blume', s));
  // da her ein Inhaltsfehler ist (B anstatt b), wird 0 als Position zurückgegeben.
end;
Will man größere Texte verwenden, so muss man sich eine eigene Methode basteln, welche das nächste Element in der Zeichenkette findet.

3. Loeschen von Zeichen mit Delete:

// Aufbau:
// Delete ( Variable, Startposition, Anzahl Zeichen)

// Einfaches Beispiel:
var
  s : String;
begin
  s := 'Sonnenblumenkerne';
  Delete( s, 7, 6);
  edDisplay.Text := s;
  // Hier wird im Edit edDisplay nur 'Sonnenkerne' stehen.
end;
Diese Prozedur verändert den String nicht, falls Position oder Längenangabe Fehlerhaft sind.

4. Einfügen mit Insert:

// Aufbau:
// Insert ( Substring, Variable, Position)

// Einfaches Beispiel:
var
  s : String;
begin
  s := 'Sonnenkerne';
  Insert('blumen', s, 7);
  edDisplay.Text := s;
  // hiernach steht 'Sonnenblumenkerne' im Edit edDisplay
end;
Sollte hier die Position größer als der eigentliche String angegeben werden, so wird der Substring an das Ende des Strings gestellt. Wenn die Positionsangabe negativ ist, wird es vor der 1. Position eingefügt.

5. Länge ermitteln mit Length: Da Strings wie Arrays behandelt werden, können wir die bekannte Methode Length( s : String) zur Längenbestimmung des Strings nutzen.

6. Formatierung von Strings mittels der Format-Prozedur:

// Aufbau:
// Format ( String, [Liste der Variablen])

// Einfaches Beispiel:
var
  s : String;
  d : Double;
  i : Integer;
begin
  i := 2;
  d := 3.14159;
  s := Format( 'PI ist %2.2f. Multipliziert mit %d ist %2.4f', [d,i,i*d]);
  edDisplay.text := s;
  // hiernach steht im Edit edDisplay:
  // PI ist 3,14. Multipliziert mit 2 ist 6,2832
end;
Aufbau des Formatierungs-Strings wie folgt:
"%" [index ":"] ["-"] [größe] ["." präzision] typ

Im String, welcher die Formatierung enthält, können folgende Typen genutzt werden:

Typ Beschreibung Beispiel
d Integer mit Vorzeichen %d -123
e Wissenschafftliche Notation - Kommazahl %e 3,14159265358979E+000
f Normale Kommazahlendarstellung %1.4f 3,1416
m Kommazahldarstellung für Währungswerte. %m 3,14 €
n Kommazahldarstellung mit Tausendertrennung %.4n 1.234,5678
s String %s Beispiel
x Ein Integer wird in Hexadezimal-Schreibweise geschriben. %x
(dies sind die Wichtigsten. Weitere findet ihr in der Delphi-Hilfe, wenn ihr nach 'Format-Routine' sucht)

 


 

Einfache Text-Dateien-Behandlung mit TStringList

 

TStringList ist ein Objekt. Dieses ist eine Liste von Strings. Hier folgt eine Beschreibung der wichtigsten Methoden und Attribute.

1. Laden und Anzeigen im Detail:

var
  // Definition der Variable
  slTextFile : TStringList;
begin
  // Instanziieren des Objektes
  slTextFile := TStringList.Create;
  try // wir benutzen try finally, damit falls eine Ausnahme auftritt,
      // das Objekt trotzdem freigegeben wird
    // hier dir Methode zum Öffnen einer Datei.
    slTextFile.LoadFromFile( 'C:\test.txt');
    // ggf. Lösche alle vorhandenen Zeilen im Memo:
    mmDisplay.Lines.Clear;
    // Strings bei Memo hinzufügen
    mmDisplay.Lines.AddStrings( slTextFile);
    // Wenn ihr TOpenDialog verwendet, dann könnt ihr OpenDialog.Filename
    // benutzen um die Datei zu öffnen.
  finally
    // Freigeben der Instanz
    slTextFile.Free;
  end;
end;

2. Weitere Methoden (Basics):

Methode Beschreibung Beispiel
add( s : String); Fügt ein String an das Ende hinzu. sl.Add( s);
Delete( index : Integer); Löscht ein String aus der Liste. sl.Delete( 2);
Insert( index : Integer; s : String); Fügt an bestimmter Stelle einen String ein. sl.Insert( 3, s);
SaveToFile( FileName : String); Speichert die Liste als Text-Datei in Datei FileName ab sl.SaveToFile( 'C:\test.txt');


Da das Kommentarmodul dieser Seite zur Zeit neu überarbeitet werden muss, sendet bitte alle Fragen, Anregungen oder Probleme mit Betreff zu welchem Thema es sich handelt an folgende Mailadresse:



www.marco-hetzel.de
www.delphi-lernen.de
www.lazarus-lernen.de

© 2006-2019 by Marco Hetzel , last modified 01.11.2018, 11:28

(* Unterstützung dient der Aufrechthaltung laufender Kosten für dieses Projekt.)