delphi - 如何将此二维数组的内容保存到文件中

标签 delphi

我需要一些帮助来尝试将二维数组的内容保存到文件中。 首先,我不确定文件应该是什么类型等.txt或dat。

我已经编辑了该帖子,以便代码采用文本格式而不是图像。

这就是我到目前为止所得到的。

program CaptureTheSarum;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Const BoardDimension = 8;

Type
  TBoard = Array[1..BoardDimension, 1..BoardDimension] Of String;

Var
  Board : TBoard;
  GameOver : Boolean;
  StartSquare : Integer;
  FinishSquare : Integer;
  StartRank : Integer;
  StartFile : Integer;
  FinishRank : Integer;
  FinishFile : Integer;
  MoveIsLegal : Boolean;
  PlayAgain : Char;
  SampleGame : Char;
  WhoseTurn : Char;
  savedFile : text;

procedure InitialiseSave;
var
  fileName : string;
begin
  fileName := 'SavedGame.dat';

  assignfile(savedfile,fileName);
  if not fileexists(fileName)
  then
    begin
      rewrite(savedfile);
      closefile(savedfile)
    end
  {endif};
end;

procedure saveGame;
var
 save : string;
 RankNo,FileNo : integer;
begin
  writeln('Would you like to save the Game?');
  readln(save);

  if (save = 'y') or (save = 'Y')
  then
    begin
      reset(SavedFile);
      write(SavedFile,board[fileno,Rankno]);
      closeFile(SavedFile);
    end
  {endif};

最佳答案

为了回答您的主要问题,您可以保存一个二维字符串数组,如下所示:

procedure TForm9.FileSaveClick(Sender: TObject);
var
  i, j: integer;
  fn: string;
  fs: TFileStream;
  fw: TWriter;
begin
  fn := 'c:\tmp\mychessfile.dat';
  fs := nil;
  fw := nil;
  try
    fs := TFileStream.Create(fn, fmCreate or fmShareDenyWrite);
    fw := TWriter.Create(fs, 1024);
    for i := 1 to BoardDimension do
      for j := 1 to BoardDimension do
        fw.WriteString(Board[i, j]);
  finally
    fw.Free;
    fs.Free;
  end;
end;

随后您可以使用以下命令将文件读回数组:

procedure TForm9.FileReadClick(Sender: TObject);
var
  i, j: integer;
  fn: string;
  fs: TFileStream;
  fr: TReader;
begin
  fn := 'c:\tmp\mychessfile.dat';
  fs := nil;
  fr := nil;
  try
    fs := TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite);
    fr := TReader.Create(fs, 1024);
    for i := 1 to BoardDimension do
      for j := 1 to BoardDimension do
          Board[i, j] := fr.ReadString;
  finally
    fr.Free;
    fs.Free;
  end;
end;

如您所见,我选择了通用 .dat 扩展名,因为该文件还将包含二进制数据,例如每个文本的长度、数据类型等。这些详细信息由 处理>TWriter/TReader 类。

您还应该考虑收到的有关文件结构选择的评论。 例如,谷歌搜索“国际象棋文件格式”(假设您正在开发国际象棋游戏),会显示 Portable_Game_Notation以及该页面的另一个引用:Forsyth-Edwards Notation .

关于delphi - 如何将此二维数组的内容保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495576/

相关文章:

delphi - 在 Delphi 编辑器中更改 TCollectionItem 的标签

delphi - 如何检查Tlist中是否存在字符串,无论其小写还是大写

c# - 调试混合的 Delphi( native )和 C# 代码,得到 "binary was built without debug information"

delphi - 将 key 发送到组件

delphi - 如何从 Delphi 中的 TList<> 读取分组数据

android - 如何使用 FireMonkey 在 iOS 上的默认应用程序中打开文件

delphi - 在 Delphi 中使自定义拖动图像不透明

delphi - 使用 Delphi 10 西雅图时的安全警告

delphi - 如果我在 "with"子句中创建一个对象,我还需要释放它吗?

delphi - 选择要在 Inno Setup 卸载程序上卸载的自定义组件