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

2024-03-04

我需要一些帮助来尝试将二维数组的内容保存到文件中。 首先,我不确定文件应该是什么类型等.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类。

您还应该考虑收到的有关文件结构选择的评论。 例如,谷歌搜索“国际象棋文件格式”(假设您正在开发国际象棋游戏),会出现便携式游戏符号 http://en.wikipedia.org/wiki/Portable_Game_Notation以及该页面的另一个参考:福赛斯-爱德华兹表示法 http://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将此二维数组的内容保存到文件中 的相关文章

  • 有人用CrossKylix进行真正的跨平台开发吗?

    新版本克罗斯凯利克斯 http crosskylix untergrund net 两周前更新过 即使 Kylix 已经停产很久了 但它似乎仍然被一些 Delphi 开发人员使用 有人在 Windows 和 Linux 的跨平台开发中成功使
  • TDictionary 上的 GetItem 由链接器消除

    我正在使用一个TDictionary of
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 在 Delphi 中使用 XML(将特定数据返回到变量)

    过去几天我一直在尝试使用 Delphi 2010 和 MSXML 我是一个极端的新手 需要一点指导 var MemoryStream TMemoryStream XMLPath String sName String XMLDoc vari
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • 从创建 UI 的同一线程更新 VCL。为什么?

    我知道我必须调用 Synchronize 来从未创建控件或向窗口发送消息的线程更新 vcl 我经常听到 线程不安全 这个词 但我找不到关于正在发生的事情的实际解释 我知道应用程序可能会因访问冲突而崩溃 但我又不知道为什么 请阐明这个主题 V
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • 可以在滚动条上绘画吗?

    是否可以在 TMemo TListbox 等标准控件的滚动条上进行绘制 我所需要的只是在滚动条上绘制一些基本形状 并且我试图避免从 stratch 实现整个滚动内容 有什么指点吗 蒂亚 确实有可能 你可能想看一下WM NCPAINT消息 这
  • TThread.resume 在 Delphi-2010 中已弃用,应该在什么地方使用?

    在我的多线程应用程序中 I use TThread 挂起 and TThread resume 自从将我的应用程序移至 Delphi 2010 后 我收到以下警告消息 DCC 警告 xxx pas 277 W1000 符号 Resume 已
  • Delphi 中是否有一些功能可以将带有 html 命名和编号实体的字符串转换为 unicode 文本?

    我从 mysql 数据库读取数据 该数据库由 php 脚本填充 所有特殊字符都会转换为命名或编号的 html 实体 例如 a m p 2 8 6 我知道没有办法将这些字符转换回 Delphi 中的原始字符作为 unicode 字符串 有没有
  • 如何取消注册我的应用程序的文件格式?

    在 Windows 10 中的 Delphi 10 4 2 win 32 VCL 应用程序中 我注册了 ICO我的图形应用程序的文件格式使用DSiWin32 DSiRegisterUserFileAssoc https github com
  • 光标不工作时完成课程

    我在 2010 年和 XE2 中广泛使用了 Delphi 中的 Complete Class at Cursor 函数 最近 在安装 XE2 的 Update 4 后 Cursor 上的 Complete Class 停止工作 经过一些研究
  • 当应用程序最小化时隐藏表单

    我有一个主表单和一个状态表单 当我的应用程序中的工作正在进行时 我会显示它们 如果工作完成我就打电话Hide状态表上出现 状态表消失 当我最小化主窗体而等待窗体可见时 就会出现问题 然后两种形式都被隐藏 这就是我想要的 但是 如果工作完成时
  • 惠普定制 OEM Windows 上的 Delphi 平台错误

    我在设置我的计算机以便运行 Delphi 时不断遇到相同的错误 我已经在PLATFORM环境变量 将其转换为 win32 但仍然给出相同的错误 错误错误 平台变量 HPD 无效 PLATFORM 必须是以下之一 Win32 Win64 An
  • 如何在TWebBrowser中显示相对路径图像?

    我正在 DesignMode Doc DesignMode On 中使用 TWebBrowser 来编写 HTML 文档 TWebBrowser 中没有加载文档 磁盘上的 HTML 文件 我直接在 TWebBrowser 中从零开始创建文档
  • Delphi 生成的 Dylib 在 OSX 上的可靠部署

    我想在 OSX 上部署一个 dylib 它是用 Delphi 创建的 这个 dylib 应该是可由第三方应用程序加载 这看起来像是一个重复的问题 但经过大量搜索后 我找不到答案 这和这个是同一个问题 https forums embarca
  • 应用程序需要很长时间才能同步线程(或根本不同步)

    我在 Delphi XE5 iOS 和 Android 中使用 REST 组件 我目前正在通过 iOS 模拟器进行测试 我的应用程序often挂在我的代码中的以下行 R Request Execute 经过一些调试后 我发现它特别挂在 RE
  • 良好的 Delphi Prism 在线资源

    在 Google 上搜索 delphi prism delphi prism 资源 或 delphi prism 代码片段 几乎找不到好的网站 是否有任何好的编程网站提供大量有关 Delphi Prism 的代码片段和教程 提前致谢 oma

随机推荐