AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String zu Array ... of Char

Ein Thema von Gingerbreadman · begonnen am 18. Mär 2006 · letzter Beitrag vom 20. Mär 2006
Antwort Antwort
Gingerbreadman

Registriert seit: 18. Mär 2006
Ort: Hamburg
6 Beiträge
 
Delphi 5 Enterprise
 
#1

String zu Array ... of Char

  Alt 18. Mär 2006, 00:45
Ich fange erst realtiv neu mit Delphi 5.0 an.
Und habe gleich 'n kleines Problem'chen ....

Type Test = Record
Daten : Array[1..40] of char
End;

Var Eingabe : File of Test;
Versuch : Test;

Mit EDIT1.TEXT erhalte ich einen String, der aber in den Record reinkommen soll.
So fit bin ich noch nicht, ich weiss nicht wie ?

Kann mir jemand dabei helfen ????
  Mit Zitat antworten Zitat
marabu

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

Re: String zu Array ... of Char

  Alt 18. Mär 2006, 06:30
Herzlich willkommen in der Delphi-PRAXiS, Gingerbreadman.

Ein Unterschied zwischen deinem (statischen) array of Char und dem String Edit.Text liegt darin, dass bei der Variable Versuch nur der Compiler weiß, wieviele Zeichen hinein passen, während diese Information bei einem String versteckt mit abgespeichert wird.

Die Übertragung von Zeichen zwischen Edit.Text und Versuch kannst du Zeichen für Zeichen in einer Schleife oder unter Verwendung von Systemroutinen blockweise vornehmen:

Delphi-Quellcode:
var
  i: Integer;
  s: String;
begin
  // zeichenweise
  s := Edit.Text;
  for i := Low(Versuch) to High(Versuch) do
    if i > Length(s)
      then Versuch[i] := #0
      else Versuch[i] := s[i];

  // blockweise
  if Length(s) > Length(Versuch) then
    Move(s[1], Versuch[1], Length(Versuch))
  else
  begin
    FillChar(Versuch, Length(Versuch), #0);
    Move(s[1], Versuch[1], Length(s));
  end;
end;
Hoffentlich habe ich nicht zu viele Fehler eingebaut...

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#3

Re: String zu Array ... of Char

  Alt 18. Mär 2006, 09:19
Also wenn ich das richtig sehe, dann wird der Text im Char-Array nicht immer von einem #0 abgeschlossen, was aber besser wäre und oftmal auh nötig ist -.-''
Delphi-Quellcode:
var
  i: Integer;
  s: String;
begin
  // zeichenweise
  s := Edit.Text;
  for i := Low(Versuch) to High(Versuch) do
    if i < High(Versuch) then
      Versuch[i] := s[i]
    else begin
      Versuch[i] := #0;
      break;
    end;
    // break kann zwar auch weggelassen werden, aber warum nicht abbrechen,
    // wenn nach dem ersten #0 eh schluß ist ^^

  // blockweise
  s := Edit.Text;
  i := Min(Length(s), Length(Versuch) - 1),
  Move(s[1], Versuch[Low(Versuch)], i);
  FillChar(Versuch[Low(Versuch) + i], Length(Versuch) - i, #0);
end;
Dat mit den Fehlern hoffe ich och ma
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#4

Re: String zu Array ... of Char

  Alt 18. Mär 2006, 09:29
Nur mal so nebenbei:

Müsste das nicht auch so funktionieren?
Delphi-Quellcode:
type
  Test = record
    Daten : string[40];
  end;

var
  Eingabe : File of Test;
  Versuch : Test;

//...

Versuch.Daten := Edit1.Text;


//edit: Zuviel C# in letzter Zeit...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#5

Re: String zu Array ... of Char

  Alt 18. Mär 2006, 10:12
Dank der Compilermagic ja wobei die es wohl etwa so machen wird, was bestimmt das Schnellste sein wird ^_^
Delphi-Quellcode:
s := Edit.Text;
i := Min(Length(s), Length(Versuch) - 1),
Move(s[1], Versuch[Low(Versuch)], i);
S[Low(Versuch) + i] := #0;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Gingerbreadman

Registriert seit: 18. Mär 2006
Ort: Hamburg
6 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: String zu Array ... of Char

  Alt 19. Mär 2006, 01:48
Zitat von himitsu:
Dank der Compilermagic ja wobei die es wohl etwa so machen wird, was bestimmt das Schnellste sein wird ^_^
Delphi-Quellcode:
s := Edit.Text;
i := Min(Length(s), Length(Versuch) - 1),
Move(s[1], Versuch[Low(Versuch)], i);
S[Low(Versuch) + i] := #0;

Sorry, aber es funktioniert alles nicht !
  Mit Zitat antworten Zitat
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
Gingerbreadman

Registriert seit: 18. Mär 2006
Ort: Hamburg
6 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: String zu Array ... of Char

  Alt 19. Mär 2006, 23:43
Zitat von marabu:
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.
Hi,

ich bin auch nicht untätig gewesen .......... learning by doing

Delphi-Quellcode:

for i := 1 to 20 do
begin
   Versuch[i] := Edit1.Text[i];
end;
Warum Einfach, wenn's kompliziert auch geht ?

Mein persönliches Problem war, einem "Array of Char" einen String zuzuweisen.

Ich habe nun nicht hier die Anfrage gestellt und darauf gewartet, dass ich die Antwort auf einem goldenen Tablett
seviert bekomme.
Wenn man schon am programmieren ist, dann soll(te) man -auch nit Hilfe- auf die Antwort selber kommen.
Meine Anfrage hier und auch die Antwort(en) in diesem Forum waren sehr hilfreich, dafür bedanke ich mich
recht herzlich.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: String zu Array ... of Char

  Alt 20. Mär 2006, 07:18
Hallo,

und wie wäre es damit?
Delphi-Quellcode:
type
  Test = record
    Daten : array[0..40] of Char;
  end;

var
  Versuch : Test;

...
StrPCopy(Versuch.Daten, Edit1.Text);
...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz