Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: String zu Array ... of Char

  Alt 19. Mär 2006, 08:01
Guten Morgen.

So richtig einfach und verständlich für jedermann ist in Delphi die Zuweisung einer Zeichenkonstante an eine Zeichenvariable:

Delphi-Quellcode:
var
  c: Char;
begin
  c := #48;
end;
Fast jede andere Zuweisung strotzt von sogenannten Nebenwirkungen. Vieles funktioniert intuitiv, aber wenn es das einmal nicht tut, dann ist ein Literaturstudium zu den Grundlagen gefragt.

Wichtig bei einem Problem mit bereitgestelltem Code ist immer, dass du genau beschreibst, was du gemacht hast, was deine Erwartungshaltung dabei war und wie diese enttäuscht wurde - Fehlermeldung, falsches Ergebnis, Explosion, ...

Ich gehe davon aus, dass dein Problem künstlich ist und keinen direkten Bezug zu einer reellen Aufgabenstellung hat - sonst ist mit an Sicherheit grenzender Wahrscheinlichkeit ein anderer Lösungsweg der bessere.

Hier also ein hoffentlich ausreichend kommentierter Test meines Code-Beispiels von Beitrag #2. Auf meiner Test-Form befinden sich von links nach rechts Edit1, Button1, Button2 und Edit2.

Delphi-Quellcode:
var
  // ein statisches array mit 20 Zeichen
  // die untere Grenze ist von 0 nach 1 verschoben
  ca: array [1..20] of Char;

// füllt ein char array mit den Zeichen eines Strings
procedure FillArray(
  var a: array of Char; // char array, welches gefüllt werden soll
  const s: String // string, der die Zeichen liefert
);
var
  i, j: Integer;
begin
  // weil die untere Grenze des char array verschoben sein kann,
  // und ich den Index für den String s nicht jedesmal mit
  // einem komplizierten Ausdruck berechnen will, verwende ich
  // eine zweite Laufvariable j zur Indizierung von s
  j := 0;
  // Um die Funktion allgemein zu halten greife ich nicht auf
  // die mir bekannten array Grenzen zu, sondern verwende die
  // Funktionen Low() und High()
  for i := Low(a) to High(a) do
  begin
    // Das erste Zeichen in einem String muss über den Index 1
    // angesprochen werden
    Inc(j);
    // Wenn im String s keine weiteren Zeichen mehr für mein
    // array enthalten sind,
    if i > Length(s)
      // dann fülle ich mit dem speziellen #0 auf
      then a[i] := #0
      // sonst übernehme ich ein weiteres Zeichen
      else a[i] := s[j];
  end;
end;

procedure TDemoForm.Button1Click(Sender: TObject);
begin
  // Hier sollen die Zeichen aus Edit1 in das global
  // deklarierte char array ca kopiert werden.
  // Die eigentliche Arbeit lasse ich durch eine Funktion
  // erledigen, das Klicken auf den Button ist nur der
  // Auslöser für diese Aktion
  FillArray(ca, Edit1.Text);
end;

procedure TDemoForm.Button2Click(Sender: TObject);
begin
  // Hier werden die Zeichen aus dem char array nach
  // Edit2 kopiert - geht viel einfacher.
  Edit2.Text := ca;
  // Zum Grübeln zeige ich die Länge des resultierenden
  // Strings an.
  ShowMessage(IntToStr(Length(Edit2.Text)));
end;
Wichtig ist, dass du jeden Befehl, den du noch nicht kennst in der Online-Hilfe nachschlägst. Auch zu den Operationen, die dir eventuell unverständlich erscheinen mögen, gibt es entprechende Kapitel in der OH. Der gezeigte Code funktioniert bei mir. Wenn er es bei dir nicht tut, dann musst du eventuelle Probleme so beschreiben, dass ich und andere es nachvollziehen können - Geht nicht gibt's nicht.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat