Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TStringList.Delimiter := Edit_1.text....TCaption vs. Char (https://www.delphipraxis.net/173006-tstringlist-delimiter-%3D-edit_1-text-tcaption-vs-char.html)

juergen 2. Feb 2013 17:42

TStringList.Delimiter := Edit_1.text....TCaption vs. Char
 
Hallo zusammen,

ich hänge an einem wahrscheinlich simplen Problem.
Da mir aber die Zusammenhänge in diesem Bereich nicht klar sind, komme ich hier nicht weiter.

Ich möchte einer TStringList den Delimiter über ein Edit "übergeben". Anscheinend wird hierfür ein Char-Typ erwartet.
Ich hatte nun angenommen, dass das mit PAnisChar möglich wäre...
Dabei erscheint aber Fehler
Zitat:

ala: Inkompatible Typen: 'Char' und 'PAnsiChar'...
Delphi-Quellcode:
procedur....
var
  sl: TStringList;
  i, j: Integer;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := PAnsiChar(Main_Form.edt_Delimiter.Text); <= ????
  ...
end;
Kann mir hier jemand weiter helfen und vllt. auch kurz erklären?
Vielen Dank schon mal vorab.

Keldorn 2. Feb 2013 17:52

AW: TStringList.Delimiter := Edit_1.text....TCaption vs. Char
 
Hallo

du brauchst doch sowas:
Delphi-Quellcode:
sl.Delimiter := Main_Form.edt_Delimiter.Text[1];
du mußt aber noch prüfen, das das edit mind 1 Zeichen enthält.

Gruß Frank

dummzeuch 2. Feb 2013 17:54

AW: TStringList.Delimiter := Edit_1.text....TCaption vs. Char
 
Du hast zwei Moeglichkeiten:

Delphi-Quellcode:
 sl.Delimiter := PAnsiChar(Main_Form.edt_Delimiter.Text)^;
oder (einfacher):

Delphi-Quellcode:
 sl.Delimiter := Main_Form.edt_Delimiter.Text[1];
Allerdings solltest Du allererstes pruefen, ob Text nicht leer ist, sonst kommt dabei Muell raus.

juergen 2. Feb 2013 18:03

AW: TStringList.Delimiter := Edit_1.text....TCaption vs. Char
 
:wall: Ich war so auf die Fehlermeldung fixiert...
Klar, das war's.
Ich danke Euch und noch ein schönes Wochenende! :dp:

sx2008 2. Feb 2013 18:09

AW: TStringList.Delimiter := Edit_1.text....TCaption vs. Char
 
Also ich würde gleich Nägel mit Köpfen machen und ein eigene Funktion/Methode vorsehen:
Delphi-Quellcode:
// liefert das Delimterzeichen zurück
// zusätzlich darf man auch ein #-Zeichen gefolgt von einer Zahl angeben
// Beispiel: '#8'  ==> Tabulatorzeichen
//           '#$FF' ==> ASCII-Zeichen 255
function StringToDelimiter(s:string):char;
const
  DEFAULT_DELIM =';';
var
  i : Integer;
begin
  if s = '' then
    s := DEFAULT_DELIM
  else if s[1] := '#' then
  begin
    i := StrToIntDef(Copy(s, 2, 5), ord('#'));
    s := Chr(i);
  end;
  result := s[1];
end;

sl.Delimiter := StringToDelimiter(Main_Form.edt_Delimiter.Text);

Popov 2. Feb 2013 18:11

AW: TStringList.Delimiter := Edit_1.text....TCaption vs. Char
 
Eigentlich wurde alles schon gesagt, aber vielleicht noch das Wesentliche: Edit1.Text enthält einen String, sl.Delimiter möchte einen Char. Du kannst einem Char nicht ein String zuweisen. Umgekehrt geht es, aber nicht so. String ist eine Zeichenkette, Char nur ein Zeichen.

Eine Möglichkeit ist so wie oben, wobei ich es so nicht machen würde, denn wenn Edit1.Text leer ist und du über Edit1.Text[1] liest, dann kracht es.

Besser ist so:

Delphi-Quellcode:
if Length(Edit1.Text) > 0 then
  sl.Delimiter := Edit1.Text[1]
else
  ... was auch immer

juergen 4. Feb 2013 18:37

AW: TStringList.Delimiter := Edit_1.text....TCaption vs. Char
 
Hmm, ich sehe gerade, dass mein letzter Post vom Samstag hier fehlt.
Dabei war ich mir sicher den abgesendet zu haben.

@Popov
Genauso hatte ich es auch gemacht. Danke für den Hinweis.

@sx2008,
Bist du Hellseher? Genau das hattee ich benötigt und war am Samstag schon dran, als ich deinen Post sah. Vielen Dank! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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