我会尽量做到最短。 我的程序中有这些数据类型。'
type
pha = (SenoraBlanco, SenorVerde, SenoraCeleste, ProfesorCiruela,
SenoritaEscarlata, CoronelMostaza, Biblioteca, Cocina, Comedor, Estudio,
Vestibulo, Salon, Invernadero, SalaDeBaile, SalaDeBillar, Candelabro,
Cuchillo, Cuerda, LlaveInglesa, Revolver, Tubo);
a = Candelabro..Tubo;
h = Biblioteca..SalaDeBillar;
p = SenoraBlanco..CoronelMostaza;
sbr = record
arma: a;
habt: h;
prj: p;
end;
var
game: text;
sobre: sbr;
我想从文件中读取这一行,然后将其分配给变量sobre的字段type sbr
:
CoronelMostaza Candelabro Vestibulo
基本上这就是我正在尝试的:
sobre.prj := CoronelMostaza;
sobre.arma := Candelabro;
sobre.habt := Vestibulo;
这是我到目前为止所尝试的:
ReadLn(game, sobre.prj, sobre,arma, sobre.habt);
我试过关闭IO检查没有结果,最接近我得到的问题的答案是将第一个单词分配给第一个变量,但总是以错误或空变量结束。请帮助我,如果你愿意,请告诉我这背后发生的事情!
答案 0 :(得分:1)
假设文本文件包含类型pha
的类型文字。
声明一个包含这些文字的文本常量:
const
phaStr : array[pha] of string = ('SenoraBlanco', 'SenorVerde', 'SenoraCeleste', 'ProfesorCiruela',
'SenoritaEscarlata', 'CoronelMostaza', 'Biblioteca', 'Cocina', 'Comedor', 'Estudio',
'Vestibulo', 'Salon', 'Invernadero', 'SalaDeBaile', 'SalaDeBillar', 'Candelabro',
'Cuchillo', 'Cuerda', 'LlaveInglesa', 'Revolver', 'Tubo');
获取其中一个字符串文字的整数索引:
function IndexOfPhaStr( const aStr : string) : integer;
var
aPHA : pha;
begin
Result := -1;
for aPHA := Low(pha) to High(pha) do
begin
if (aStr = phaStr[aPHA]) then
begin
Result := Ord(aPHA);
break;
end;
end;
end;
该文件包含文本信息,因此您必须将文本转换为数据类型。
在TStringList
中使用classesh.inc
的简单示例:
var
i : Integer;
sList : TStringList;
s : String;
ix : array [1..3] of integer;
begin
...
sList := TStringList.Create;
sList.Delimiter := ' ';
AssignFile(game,'TEST.Txt');
Reset(game);
System.ReadLn(game, s);
System.CloseFile(game);
sList.DelimitedText := s;
for i := 0 to 2 do
ix[i+1] := IndexOfPhaStr(sList[i]);
if (ix[1] in [Ord(Low(p))..Ord(High(p))])
then sobre.prj := pha(ix[1]);
if (ix[2] in [Ord(Low(a))..Ord(High(a))])
then sobre.arma := pha(ix[2]);
if (ix[3] in [Ord(Low(h))..Ord(High(h))])
then sobre.habt:= pha(ix[3]);
sList.Free;
end;
如果您的文本文件包含更多信息,请同时为它们进行文本转换。
PS。我会将错误处理作为练习。