Delphi - 从文本文件

时间:2015-05-30 16:00:13

标签: arrays delphi multidimensional-array

我正在尝试将一个包含字符的二维数组存储到一个逗号分隔值(CSV)格式的文本文件中。我已经半数能够将数组存储到文本文件中,但我不认为它会允许它被读回,因为在每行结尾处没有新行,数组的末尾将是(董事会[1] [8])举个例子。我一直无法将信息读回到阵列中。

这是我将数组存储到文本文件

的代码
Const 
  BoardDimension = 8;

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

 procedure SaveGame(Board : Tboard);
    var
      FileNm : Textfile;
      RankCount : Integer;
      FileCount : Integer;
    begin
      Assignfile(Filenm, 'SavedGame.txt');
      Rewrite(Filenm);
      for RankCount :=1 to BoardDimension do
      begin
        for FileCount := 1 to BoardDimension-1 do
          begin
            write(Filenm,Board[RankCount,FileCount],',');
          end;
          write(Filenm,Board[RankCount,BoardDimension]);
      end;
      CloseFile(filenm);
      writeln('game saved');
    end;

这是我回读文本文件的代码,但是我收到一条错误,指出函数Copy2SymbDel未声明,但我在using语句中包含了strutils

procedure LoadGame(Var Board :TBoard);
    var
      Filenm : TextFile;
      RankCount : Integer;
      FileCount : Integer;
      Text : String;
    begin
      AssignFile(Filenm, 'SavedGame.txt');
      reset(Filenm);
      for RankCount := 1 to BoardDimension do
      begin
        readln(Filenm,text);
        for FileCount := 1 to BoardDimension -1 do
        begin
          Board[RankCount,FileCount] := Copy2SymbDel(Text, ',');
        end;
        Board[RankCount,BoardDimension] := Text;
      end;
    end;

如何在delphi / pascal

中存储和读回二维数组

谢谢

1 个答案:

答案 0 :(得分:0)

Copy2SymbDel是一个FreePascal库函数,在Delphi中不可用。它描述如下:

function Copy2SymbDel(
  var S: string;
  Symb: Char
):string;
     

<强>描述

     

Copy2SymbDel确定第一次出现的Symb的位置   在字符串S中并返回到此位置的所有字符。该   Symb字符本身不包含在结果字符串中。所有   返回的字符和Symb字符,都从中删除   字符串S,之后它被右边修剪。如果没有出现Symb   S,然后整个S返回,S本身就被清空了。

在Delphi中,函数可以像这样实现:

function Copy2SymbDel(var S: string; Symb: Char): string;
var
  I: Integer;
begin
  I := Pos(Symb, S);
  if I = 0 then
  begin
    Result := S;
    S := '';
  end
  else
  begin
    Result := Copy(S, 1, I-1);
    S := TrimRight(Copy(S, I+1, MaxInt));
  end;
end;