Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String > 255, oder anderer Datentyp (https://www.delphipraxis.net/28633-string-255-oder-anderer-datentyp.html)

Patrick 27. Aug 2004 11:04


String > 255, oder anderer Datentyp
 
Hallo,

Ich hab folgendes Problem:
Ich brauche einen String ohne Limit.

Also das kann ich vergessen, zu klein
Code:
procedure StrtoTZ(ZString : string; var zahl : TZahl);
Das geht leider auch nicht, er erkennt TCaption nicht
Code:
procedure StrtoTZ(ZString : TCaption; var zahl : TZahl);
Ich rufe die Procedure so auf
Code:
StrtoTZ(Edit1.Text,zahl1);
Edit1.Text ist ja vom Typ TCaption...

XeRo 27. Aug 2004 11:07

Re: String > 255, oder anderer Datentyp
 
Versuchs mal mit einem AnsiString; :lol:

[Edit]Scheinbar gibt es den longstring nicht :gruebel: woher hab ich das dann?[/Edit]

Patrick 27. Aug 2004 11:20

Re: String > 255, oder anderer Datentyp
 
Das ganze kann funktionieren, aber ich hab da noch ein anderes Problem

Wenn ich das ganze anders herum mache gibt's diese Fehlermeldung:
"Types of actual and formal var parameters must be identical"

Code:
procedure TZtoStr(var ZString : ansistring; var zahl : TZahl);
...
TZtoStr(Edit3.Text,erg); <-- in dieser Zeile

Shaman 27. Aug 2004 11:22

Re: String > 255, oder anderer Datentyp
 
Man kann Properties leider nicht als Referenz übergeben :(

mytar 27. Aug 2004 11:24

Re: String > 255, oder anderer Datentyp
 
Edit1.Text ist sicher kein AnsiString,
und sonst ist erg nicht vom Typ TZahl

vielleicht klappt:

Delphi-Quellcode:
AnsiString(Edit1.Text)
als 1. Parameter.

XeRo 27. Aug 2004 11:30

Re: String > 255, oder anderer Datentyp
 
An dem asnistring kanns kaum liegen, denn das funktioniert:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 hallo:AnsiString;
begin
 hallo:=edit1.text;
 caption:=hallo;
end;
ich würd einfach was anderes für TZahl verwenden...


[edit]delphi code anstelle von code genommen[/edit]

Patrick 27. Aug 2004 11:48

Re: String > 255, oder anderer Datentyp
 
Also ein bissl von jedem klappt...

Der AnsiString ist scheinbar ersteinmal lang genug...

Am "erg" hat's nicht gelegen, das ist genz sicher vom Typ TZahl!

Zitat:

Man kann Properties leider nicht als Referenz übergeben
Ich denke das war's.
Delphi-Quellcode:
procedure StrtoTZ(ZString : string; var zahl : TZahl);
Die Fehlermeldung kahm nämlich schon, als ich hier vor den "ZString" ein var gesetzt habe, nur hier konnte ich es wegmachen, was andersherum (TZtoStr) nicht möglich war, sopnst hätte es nicht funktioniert.

Gelöst habe ich es jetzt einfach mit einer Function, und zwar so:
Delphi-Quellcode:
function TZtoStr(zahl : TZahl):ansistring;
...
Edit3.Text:=TZtoStr(erg);

Luckie 27. Aug 2004 12:14

Re: String > 255, oder anderer Datentyp
 
Zitat:

Zitat von Patrick
Der AnsiString ist scheinbar ersteinmal lang genug...

Die theoretische Länge von 2 GB sollte auch reichen oder?

Patrick 27. Aug 2004 12:31

Re: String > 255, oder anderer Datentyp
 
Ich denke, das reicht gerade so :wink:

Aber was ist denn jetzt eigentlich der Unterschied zwischen String und AnsiString???

scp 27. Aug 2004 12:39

Re: String > 255, oder anderer Datentyp
 
String kann sich von einer Delphi-Version zur anderen ändern, ist also ein sogenannter generischer Typenbezeichner (bzw. funktioniert so). Bei älteren Versionen war String noch identisch zu ShortString, in Delphi 7 sollte er aber zu AnsiString identisch sein, wenn nicht der entsprechende Kompilerschalter gesetzt ist.
Alles nachzulesen in der Delphi-Hilfe unter "String-Typen".

nailor 27. Aug 2004 12:43

Re: String > 255, oder anderer Datentyp
 
hmm. bei mir hat ein ganz normaler string keine "sichtbare" beschränkung:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  s: string;
  i: integer;
begin
s := '';
for i := 0 to 10000 do
  s := s + inttostr(i);
Memo1.Text := s;
end;

sakura 27. Aug 2004 12:52

Re: String > 255, oder anderer Datentyp
 
Zitat:

Zitat von Patrick
Ich hab folgendes Problem:
Ich brauche einen String ohne Limit.

Der normale String hat (seit D2) kein (spürbares) Limit, er ist bis auf 2GB (oder waren es 4 :gruebel:) aufblasbar. Die ShortStrings und Strings wie String[25] haben ein Limit.

...:cat:...

SleepyMaster 27. Aug 2004 12:54

Re: String > 255, oder anderer Datentyp
 
Zitat:

Ich hab folgendes Problem:
Ich brauche einen String ohne Limit.

Also das kann ich vergessen, zu klein
Hä??? Das versteh ich jetzt nicht! Soweit ich weiß ist ein string auf eine Größe von 4GB limitiert.
Genügt das nicht???

type
TZahl = int64;

Delphi-Quellcode:
procedure StrtoTZ(ZString : string; var zahl : TZahl);
begin

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  X: int64;
begin
SetLength(s, 1024 * 1024 * 1024);
StrtoTZ(s, x);
end;
Damit würde man einen immerhin 1GB großen string übergeben

Patrick 27. Aug 2004 13:15

Re: String > 255, oder anderer Datentyp
 
Also ich hab gelesen, dass der "normale" String auf 255 Zeichen beschränkt ist, was sich am Beispiel "ShowMessage" zeigt:
Delphi-Quellcode:
ShowMessage('<--Hier uber 255 Zeichen rein machen-->');
Der ist beschränkt...

Ich muss zugeben, ich habe in einem Buch für Turbo Pascal nachgesehen, aber das obrige Beispiel zeigt dies auch, denke ich...

Ich hab die ganze Geschichte jetzt nochmal mit einem "String" getestet, der macht Locker 500-1000 Zeichen mit!
Ich dachte, ich müsste dann mit SetLength arbeiten, was ich allerdings nicht mache, ich mache eigentlich nur eine Zuweisung mit einem Edit.Text.


Dann ist es ja jetzt egal, ob ich String oder AnsiString benutze...

sakura 27. Aug 2004 13:21

Re: String > 255, oder anderer Datentyp
 
Zitat:

Zitat von Patrick
Dann ist es ja jetzt egal, ob ich String oder AnsiString benutze...

Jain, in Delphi 7 sind die Strings gleich AnsiString, aber das muss nicht so bleiben ;) String ist der jeweilige Standard der Delphi-Version, während AnsiString immer AnsiString bleiben wird :zwinker:

...:cat:...

Luckie 27. Aug 2004 13:26

Re: String > 255, oder anderer Datentyp
 
Zitat:

Zitat von Patrick
Also ich hab gelesen, dass der "normale" String auf 255 Zeichen beschränkt ist, was sich am Beispiel "ShowMessage" zeigt:
Delphi-Quellcode:
ShowMessage('<--Hier uber 255 Zeichen rein machen-->');
Der ist beschränkt...

Das darfst du aber nicht mit hardgecodeten Stringliteralen verwechseln. Folgendes geht nämlich: Eine Konstante definiren und dort mit '+' hardgecodete Strings von 255 Zeichenlänge zusammenstückel dass man über 255 Zeichen kommt. Die Konstante kannst du dann ohne Probleme mit ShowMessage anzeigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz