1

最短になるように頑張ります。私のプログラムにはこれらのデータ型があります。

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チェックをオフにしようとしましたが、この問題の答えに最も近いのは、最初の単語を最初の変数に割り当てることですが、常にエラーまたは空の変数で終了します。私を助けてください。よろしければ、このすべての背後で何が起こっているかを教えてください!

4

1 に答える 1

1

テキスト ファイルに type の型リテラルが含まれていると仮定します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;

ファイルにはテキスト情報が含まれているため、テキストをデータ型に変換する必要があります。TStringListinを使用した簡単な例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。エラー処理は演習として残しておきます。

于 2013-03-30T10:48:17.053 に答える