|
| String Literals i Delphi 6 / Kylix 2 Fra : Mikael Rune Jensen |
Dato : 20-08-02 17:20 |
|
Hej
Er det muligt i Delphi 6 (eller kylix 2) at kunne lave string literals der
indeholder mere en 255 karakterer?
Alstå hvor jeg har flg:
// -- Kode start --
var
enStreng : streng;
enStreng := 'Her skulle der gerne kunne stå mere en 255 karakterer uden at
compileren brokker sig ...';
// -- Kode slut --
Altså således at man assigner mere end 255 karakterer til strengen i et
hug - altså uden at bruge nogle former for concat-metoder?
Er det rigtigt forstået at Delphi pr. default benytter Long Strings, når man
erklærer en variabel som "string"? Med andre ord så er flg. to variable
ækvivalente (med mindre man sætter compiler direktivet {$H-}):
// -- Kode start --
var
enStreng : string;
endnuEnStreng : AnsiString;
// --Kode slut --
På forhånd tak
--
Mikael Rune Jensen
Department of Computer Science
Aalborg University
http://www.cs.auc.dk/~mrj
| |
Uffe Kousgaard (20-08-2002)
| Kommentar Fra : Uffe Kousgaard |
Dato : 20-08-02 17:41 |
|
"Mikael Rune Jensen" <mrj@cs.auc.dk> wrote in message
news:3d626c3f$0$675$ba624c82@nntp04.dk.telia.net...
> // -- Kode start --
Således:
var
enStreng : string;
begin
enStreng := 'Her står der 200 karakterer '+
'og 200 mere';
end;
Ovenstående er det nærmeste du kommer at gøre det i et hug. Det kan i
øvrigt anbefales ikke at tælle efter i eksemplet Det er compileren,
der ikke accepterer linier over en hvis længde. Strengene kan derimod
godt være lange.
> Er det rigtigt forstået at Delphi pr. default benytter Long Strings,
når man
> erklærer en variabel som "string"? Med andre ord så er flg. to
variable
> ækvivalente (med mindre man sætter compiler direktivet {$H-}):
Ja i D6. Det var anderledes tidligere, men jeg kan ikke huske, hvornår
det skiftede.
| |
Mikael Rune Jensen (20-08-2002)
| Kommentar Fra : Mikael Rune Jensen |
Dato : 20-08-02 18:00 |
|
Hejsa
> Således:
>
> var
> enStreng : string;
> begin
> enStreng := 'Her står der 200 karakterer '+
> 'og 200 mere';
> end;
> Ovenstående er det nærmeste du kommer at gøre det i et hug.
Ok. Så må jeg lære at leve med den concat-operator :)
Er der nogen der ved om der er en speciel grund til at string literals kun
kan være 255 karakterer?
Er det et levn fra gammel "Pascal tid"?
> Det kan i
> øvrigt anbefales ikke at tælle efter i eksemplet
Det kunne aldrig falde mig ind - der er jo 400 karakterer i den streng ;)
Mvh.
Mikael Rune Jensen
| |
David A. D. Konrad (21-08-2002)
| Kommentar Fra : David A. D. Konrad |
Dato : 21-08-02 08:28 |
|
"Uffe Kousgaard" <uffe@routeware.dk> skrev i en meddelelse
news:3d62711e$0$43946
> > Er det rigtigt forstået at Delphi pr. default benytter Long Strings,
> når man
> > erklærer en variabel som "string"? Med andre ord så er flg. to
> variable
> > ækvivalente (med mindre man sætter compiler direktivet {$H-}):
>
> Ja i D6. Det var anderledes tidligere, men jeg kan ikke huske, hvornår
> det skiftede.
Jeg mener skiftet kom i D4.
| |
Mikael Rune Jensen (21-08-2002)
| Kommentar Fra : Mikael Rune Jensen |
Dato : 21-08-02 08:52 |
|
Hej
> > > Er det rigtigt forstået at Delphi pr. default benytter Long Strings,
> > når man
> > > erklærer en variabel som "string"? Med andre ord så er flg. to
> > variable
> > > ækvivalente (med mindre man sætter compiler direktivet {$H-}):
> >
> > Ja i D6. Det var anderledes tidligere, men jeg kan ikke huske, hvornår
> > det skiftede.
>
> Jeg mener skiftet kom i D4.
"Virker" compiler direktivet {$H+} så i f.eks. Delphi 3? Altså således at
hvis man har erklæret en variabel i D6 således:
enStreng : string; // En Long String i Delphi 6 pr. default.
og så ønsker at portere sin kode til en Delphi 3 (af en eller anden mystisk
grund :), så er variablen enStreng stadig en Long String når bare man
antænder {$H+}?
Mvh.
Mikael Rune Jensen
--
Mikael Rune Jensen
Department of Computer Science
Aalborg University
http://www.cs.auc.dk/~mrj
| |
David A. D. Konrad (21-08-2002)
| Kommentar Fra : David A. D. Konrad |
Dato : 21-08-02 09:44 |
|
"Mikael Rune Jensen" <mrj@cs.auc.dk> skrev i en meddelelse
news:3d6346d6$0$386
> "Virker" compiler direktivet {$H+} så i f.eks. Delphi 3? Altså således at
> hvis man har erklæret en variabel i D6 således:
> enStreng : string; // En Long String i Delphi 6 pr. default.
Nej, det jeg tænker på er, at jeg mener - men kan ikke verificere det, for
jeg har ikke D3/D4 på min computer her - at der først kom differentiering
imellem "huge strings" (long strings/ansistrings) og typen shortstring i D4,
og altså under én hat kunne veksle imellem dem via typen String.
> og så ønsker at portere sin kode til en Delphi 3 (af en eller anden
mystisk
> grund :), så er variablen enStreng stadig en Long String når bare man
> antænder {$H+}?
Jeg mener i så fald du eksplicit skal bruge én af de "specialierede"
string-typer. Men mit svar til Uffe var kun et of-the-head svar, så tag det
ikke for mere end det...
| |
Mikkel Breiler (22-08-2002)
| Kommentar Fra : Mikkel Breiler |
Dato : 22-08-02 14:29 |
|
"David A. D. Konrad" <david_konrad@hotmail.com> wrote:
>"Mikael Rune Jensen" <mrj@cs.auc.dk> skrev i en meddelelse
>news:3d6346d6$0$386
>
>> "Virker" compiler direktivet {$H+} så i f.eks. Delphi 3? Altså således at
>> hvis man har erklæret en variabel i D6 således:
>> enStreng : string; // En Long String i Delphi 6 pr. default.
>
>Nej, det jeg tænker på er, at jeg mener - men kan ikke verificere det, for
>jeg har ikke D3/D4 på min computer her - at der først kom differentiering
>imellem "huge strings" (long strings/ansistrings) og typen shortstring i D4,
>og altså under én hat kunne veksle imellem dem via typen String.
min udgave af D3 understøtter brugen af $H+
Der er et dump af min compilers console mode compiler.
Delphi for Win32 Version 10.0 Copyright (c) 1983,97 Borland International
Confidential pre-release version built Jan 30 1997 12:01:13
Syntax: DCC32 [options] filename [options]
-A<unit>=<alias> = Set unit alias -K<addr> = Set image base addr
-B = Build all units -LU<package> = Use package
-CC = Console target -M = Make modified units
-CG = GUI target -N<path> = DCU output directory
-D<syms> = Define conditionals -O<paths> = Object directories
-E<path> = EXE output directory -P = look for 8.3 file names also
-F<offset> = Find error -Q = Quiet compile
-GD = Detailed map file -R<paths> = Resource directories
-GP = Map file with publics -U<paths> = Unit directories
-GS = Map file with segments -V = Debug information in EXE
-H = Output hint messages -W = Output warning messages
-I<paths> = Include directories -Z = Output 'never build' DCPs
-J = Generate .obj file -$<dir> = Compiler directive
-JP = Generate C++ .obj file
Compiler switches: -$<letter><state> (defaults are shown below)
A+ Aligned record fields P+ Open string params
B- Full boolean Evaluation Q- Integer overflow checking
C+ Evaluate assertions at runtime R- Range checking
D+ Debug information T- Typed @ operator
G+ Use imported data references U- Pentium(tm)-safe divide
H+ Use long strings by default V+ Strict var-strings
I+ I/O checking W- Generate stack frames
J+ Writeable structured consts X+ Extended syntax
L+ Local debug symbols Y- Symbol reference info
M- Runtime type info Z1 Minimum size of enum types
O+ Optimization
Stack size: -$M<minStackSize[,maxStackSize]> (default 16384,1048576)
>> og så ønsker at portere sin kode til en Delphi 3 (af en eller anden
>mystisk
>> grund :), så er variablen enStreng stadig en Long String når bare man
>> antænder {$H+}?
>
>Jeg mener i så fald du eksplicit skal bruge én af de "specialierede"
>string-typer. Men mit svar til Uffe var kun et of-the-head svar, så tag det
>ikke for mere end det...
D3 prerelease går fra fejl med shortstring når der forventes longstring til ingen
fejl når jeg bruger direktivet. Så det virker altså. SVJH var det brugen af STRING i
filer af typen TEXT som den ikke brød sig om. og som jeg løste med {$H-}.
-breiler
| |
David A. D. Konrad (22-08-2002)
| Kommentar Fra : David A. D. Konrad |
Dato : 22-08-02 15:27 |
|
"Mikkel Breiler" <mibm@image.dk> skrev i en meddelelse
> D3 prerelease går fra fejl med shortstring når der forventes longstring
til ingen
> fejl når jeg bruger direktivet. Så det virker altså. SVJH var det brugen
af STRING i
> filer af typen TEXT som den ikke brød sig om. og som jeg løste med {$H-}.
OK - så var sgu' nok i D3 det blev indført. Jeg kunne bare ikke huske, i
forbindelse med nogle komponenter, om det var i forbindelse med D3 eller D4
jeg skulle begynde at indsætte direktiver, f.eks i records mv, der brugte
typen String.
| |
|
|