Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lange Strings im Record (https://www.delphipraxis.net/131283-lange-strings-im-record.html)

oldmann 22. Mär 2009 08:57


Lange Strings im Record
 
Hallo,

gibt es in Delphi eine Möglichkeit in einem Record einen längeren String als 255 Zeichen zu benutzen.
Ich arbeite mich Delphi 6 Prof.

Mit freundlichen Grüssen,
Oldmann

himitsu 22. Mär 2009 09:15

Re: Lange Strings im Record
 
Eigentlich sollte es möglich sein, nur liegen dann die Textdaten nicht im Record, sondern im Record ist nur ein 4-Byte-Zeiger auf den Text enthalten.

direkt im String ginge nur ein Char-Array

Delphi-Quellcode:
Type TMyRec = Record
    String1: String;
    String2: AnsiString;
    Text1: Array[1..1024] of AnsiChar;
    Text2: Array[0..1023] of Char;
  End;
das sind beides sozusagen strings mit je maximal 1024 Zeichen.

String1 und String2: hier wären halt nir die Zeiger im Array und der Rest irgendwo anders.

Text1:
- Index 1 bis 1024 mach ich lieber so, da es so mit der Indizierung eines Strings übereinstimmt
- AnsiChar entspricht in D6 noch dem Char, aber in D2009 wäre Char=WideChar
und damit es dort keine Probleme gibt, nutz da lieber direkt AnsiChar

Text2:
- Index 0 bis 1024 würden viele nehmen, da die dymaischen Array und vieles andere mit dem Index 0 beginnt

alzaimar 22. Mär 2009 09:16

Re: Lange Strings im Record
 
Natürlich geht das. Du möchtest deinen Record aber bestimmt auch abspeichern. Da wird das dann etwas komplizierter. Sag mal, was du machen willst.

oldmann 22. Mär 2009 09:45

Re: Lange Strings im Record
 
Hallo,

hier ist ein Beispiel:
Es geht z. B. um folgenden Record:
Delphi-Quellcode:
 type
   Dateien=record
   Gegenstand,Raum,bemerk:string[25];
   preis:double;
   Anzahl:Integer;
   gekauft_am:string[10];
   identnr,bild:String[15];
   bemerkung:String[255];
 end;

Das ganze wird dann als Datensatz gespeichert.

Ausgegeben wird das dann in ein Stringgrid z. B. So:

     assignfile(hrdat,lpf+'Datei.dat');
     reset(hrdat);
     while not eof (hrdat) do
     begin
         read(hrdat,daten);        
        StringGrid1.cells[0,reihe]:=daten.gegenstand;
        StringGrid1.cells[1,reihe]:=daten.raum;
        ….usw.
     end;
     closefile(hrdat);
Das Feld 'Bemerkung' wird unter dem Stringgrid in eine Memo ausgegeben.
Ich möchte aber das Feld 'Bemerkung' grösser haben das mehr Daten eingegeben werden können.
Wie kann ich das anstellen.

Gruß Oldmann

quendolineDD 22. Mär 2009 10:12

Re: Lange Strings im Record
 
Vielleicht könntest du noch die Delphi-Tags setzten, damit dein Code lesbarer wird.
Wenn du einen String mit 255 Zeichen vorgibst, und ihn verlängern möchtest, dann solltest du die Zahl erhöhen ;-)

oldmann 22. Mär 2009 10:24

Re: Lange Strings im Record
 
Hallo,

nach meiner Kenntnis kann ein String in einem Record nur max. 255 Zeichen enthalten.
Wenn ich die Zahl einfach erhöhen könnte, hätte ich das Problem nicht.
Gruss Oldmann

mkinzler 22. Mär 2009 10:28

Re: Lange Strings im Record
 
Ein ShortString kann nur maximal 255 Zeichen lang werden. Bei einem AnsiString besteht diese Beschränkung nicht

oldmann 22. Mär 2009 10:42

Re: Lange Strings im Record
 
hallo mkinzler,

Leider kenne ich mich mit Ansistrings nicht aus.
Wenn ich hinter 'Bemerkung:Ansistring' setze kommt ein Fehlermeldung:
'Benötigt Finalization, nicht inm Dateityp erlaubt.'
Wie muss ich einen Ansistring deklarieren?

Gruss Oldmann

mkinzler 22. Mär 2009 10:46

Re: Lange Strings im Record
 
Genauso. Allerdings ist dieser dann 0-terminiert, d.h. hat keine feste Länge und kann deshalb nicht in einer typisierten Datei verwendet werden. Du musst, wie oben beschrieben auf einen Char Array ausweichen.

SirThornberry 22. Mär 2009 10:49

Re: Lange Strings im Record
 
@oldman: Könntest du bitte noch die Delphitags setzen. Dazu einfach auf http://www.delphipraxis.net/template.../icon_edit.gif über dem entsprechenden Beitrag klicken und dann den Beiträg entsprechend ändern. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr.
Seite 1 von 3  1 23      

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