有没有办法在大于255个字符的记录中获取字符串?
修改
我有以下内容:
TQuery = Record
Action: string[255];
Data: string;
end;
如果我现在说:
Test: TQuery;
Test.Data := 'ABCDEFGHIJKLMN...up to 255...AISDJIOAS'; //Shall be 255 chars
它不起作用,编译器抱怨......如何解决?
答案 0 :(得分:7)
如果您希望能够将记录写入文件,则可以将字符串定义为ansichar数组。之后你可以像对待一个字符串一样对待它。
示例:
program StrInRecTest;
{$APPTYPE CONSOLE}
uses SysUtils;
type
TStringRec=
packed record
S:array[0..1023] of ansichar;
end;
var
StringRec:TStringRec;
F:File of TStringRec;
begin
StringRec.S := 'Hello';
WriteLn(StringRec.S);
WriteLn('First char is:'+StringRec.S[0]); // watch out with this
// now let's try saving this to a file and reading it back...
// make a long string with x-es
FillChar(StringRec.S,Length(StringRec.S),'X');
StringRec.S[High(StringRec.S)] := #0; // terminate the string
WriteLn(StringRec.S);
// write to a file
AssignFile(F,'tmp.txt');
ReWrite(F);
Write(F,StringRec);
CloseFile(F);
WriteLn;
// read from file
AssignFile(F,'tmp.txt');
Reset(F);
Read(F,StringRec);
CloseFile(F);
WriteLn(StringRec.S); // yay, we've got our long string back
ReadLn;
end.
答案 1 :(得分:5)
Delphi和三个字符串
曾几何时,在pascal的早期,那里有短弦。它们由一个字节块组成,最大大小为256.第一个字节是长度字节:5, H, e, l, l, o
您可以定义固定长度的字符串以节省内存:
a: string[5];
Windows使用C字符串,它是指向以0字符结尾的内存块的指针。这些字符串不限于255个字节。首先,它们作为PChar(指向char的指针)提供。但后来默认字符串被解释为C类型字符串。你仍然可以使用短串:
a: string[22];
b: ShortString;
c: string; // C (Delphi) string
使用Delphi 2009,引入了Unicode。现在每个字符串都是一个Unicode字符串。这是指向包含unicode字符的内存的指针。 我们仍然有ShortString类型。 AnsiString或PAnsiChar可以访问旧的ansi字符串。
现在字符串是指针,大小没有限制。但字符串文字仍然限制为255个字符。
答案 2 :(得分:4)
通常是的。只要使用普通的String类型(或其他长字符串类型)而不是ShortString,就不必做一些特殊的事情。
type
TMyRec = record
Value: string;
end;
在实践中,这取决于你想对记录做什么。如果要阻止将某些内容写入文件或将记录提供给DLL函数,则必须切换到char数组:
type
TMyRec = record
Value: array[0..1023] of Char;
end;
答案 3 :(得分:1)
在Delphi中有不同类型的字符串:
string通常被解释为AnsiString。 AnsiString& WideStrings实际上是指向存储字符串的内存的指针。编译器在那里做了一些魔术来节省资源。
因此将字符串放入记录可以得到所需的结果,但我想记录中的sizeof运算符将会失败。
Thx向Smasher指出这一点:这是引自Delphi 2006的帮助。不同的Delphi版本可能表现不同。
答案 4 :(得分:0)
如果您的意思是将其存储到数据库中,那么它完全依赖于您正在使用的数据库。一些数据库支持长度达8K的字符串;和SQL 2005引入了varchar(MAX),其限制为,i 相信 2GB。对于相同的数据类型,MySql 5似乎限制在大约65K。
但是,一些较旧的只允许[var] char(255)。
你想把它放进去什么?