Pascal:写一个没有引用计数类型的很长的字符串(例如:ansistring)
Pascal : write a very long string without reference-counted types (ex:ansistring)
我现在正在用 Pascal 制作一个单元库。我想知道我是否可以在不使用 Ansistring 或 {$H+} 的情况下分配一个很长的字符串,因为我无法分配具有引用计数类型的类型化文件。先谢谢了。
编辑:添加代码
type
dataFilm = record
title : array [1..255] of char;
genre : array [1..255] of char;
viewerRating : array [1..255] of char;
duration : integer;
synopsis : array [1..2000] of char;
priceWeekdays : longint;
priceWeekend : longint;
end;
theatreUDT = record
mainDataFilm : array [0..100] of dataFilm;
end;
ftheatreUDT = record
fmainDataFilm : file of dataFilm; //It fails here when i use ansistring
end;
procedure loadMain(var main : theatreUDT; var fmain:ftheatreUDT);
begin
assign(fmain.fmainDataFilm,'Data/dataFilm.dat');
reset(fmain.fmainDataFilm);
end;
这个程序完全没有问题,只是,它不能容纳很长的字符串作为概要。
您可以使用 array of char
来获得更长的字符串。
dataFilm = record
title : string;
genre : string;
viewerRating : string;
duration : integer;
synopsis : array[0..1999] of char;
priceWeekdays : longint;
priceWeekend : longint;
end;
但是请注意,这不是一个很好的解决方案,因为
a) 这意味着您必须为字符串选择一个最大长度。如果您选择的长度太小,有些文字将放不下。如果你选择的长度太大,你会浪费很多磁盘 space 因为 space 根据记录的定义,文件中的记录总是相同的。
b) 您不能轻易修改数据的结构。例如,如果要在有关电影的信息中添加一个 "director" 字段,则必须编写代码将旧文件格式转换为新文件格式。一旦使用此代码创建文件,基本上就无法更改 dataFilm 类型的定义。
c) 您无法通过任何其他方式轻松查看这些文件。如果您使用 JSON 或 XML 之类的标准甚至数据库,您可以使用其他工具轻松查看内容。
d) 您无法使用其他编程环境轻松访问这些文件。将来您可能希望从 Pascal 迁移到其他环境或允许其他工具访问这些文件。使用一些标准格式或数据库比使用 pascal 方式更容易。
我现在正在用 Pascal 制作一个单元库。我想知道我是否可以在不使用 Ansistring 或 {$H+} 的情况下分配一个很长的字符串,因为我无法分配具有引用计数类型的类型化文件。先谢谢了。
编辑:添加代码
type
dataFilm = record
title : array [1..255] of char;
genre : array [1..255] of char;
viewerRating : array [1..255] of char;
duration : integer;
synopsis : array [1..2000] of char;
priceWeekdays : longint;
priceWeekend : longint;
end;
theatreUDT = record
mainDataFilm : array [0..100] of dataFilm;
end;
ftheatreUDT = record
fmainDataFilm : file of dataFilm; //It fails here when i use ansistring
end;
procedure loadMain(var main : theatreUDT; var fmain:ftheatreUDT);
begin
assign(fmain.fmainDataFilm,'Data/dataFilm.dat');
reset(fmain.fmainDataFilm);
end;
这个程序完全没有问题,只是,它不能容纳很长的字符串作为概要。
您可以使用 array of char
来获得更长的字符串。
dataFilm = record
title : string;
genre : string;
viewerRating : string;
duration : integer;
synopsis : array[0..1999] of char;
priceWeekdays : longint;
priceWeekend : longint;
end;
但是请注意,这不是一个很好的解决方案,因为
a) 这意味着您必须为字符串选择一个最大长度。如果您选择的长度太小,有些文字将放不下。如果你选择的长度太大,你会浪费很多磁盘 space 因为 space 根据记录的定义,文件中的记录总是相同的。
b) 您不能轻易修改数据的结构。例如,如果要在有关电影的信息中添加一个 "director" 字段,则必须编写代码将旧文件格式转换为新文件格式。一旦使用此代码创建文件,基本上就无法更改 dataFilm 类型的定义。
c) 您无法通过任何其他方式轻松查看这些文件。如果您使用 JSON 或 XML 之类的标准甚至数据库,您可以使用其他工具轻松查看内容。
d) 您无法使用其他编程环境轻松访问这些文件。将来您可能希望从 Pascal 迁移到其他环境或允许其他工具访问这些文件。使用一些标准格式或数据库比使用 pascal 方式更容易。