从pascal文件中读取创建的记录类型

时间:2013-03-30 01:21:34

标签: types record pascal

我会尽量做到最短。 我的程序中有这些数据类型。'

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检查没有结果,最接近我得到的问题的答案是将第一个单词分配给第一个变量,但总是以错误或空变量结束。请帮助我,如果你愿意,请告诉我这背后发生的事情!

1 个答案:

答案 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。我会将错误处理作为练习。