如何在 Delphi Syndey 10.4 中正确拆分逗号分隔的文本?

我正在将代码从 Lazarus 转换为 Delphi 10.4 Sydney 并且有一行抛出错误:

// Split line and put it into a new array, txtDataArray
txtDataArray := txtToParse.Split(['.', ',', '!'], TStringSplitOptions.ExcludeEmpty);

txtToParse 是逗号分隔的文本变量。

我将如何正确编写它以在 Delphi 10.4 Sydney 中工作?

我试过这个,我得到一个错误,指出:

var我下面:

// For splitting
charArray : Array[0..2] of Char;
txtToParse : String;
txtArray : array of String;

然后在主函数中我有:

// Split line and put it into a new array, txtArray
charArray[0] := '.';
charArray[1] := ',';
charArray[2] := '!';
txtArray := txtToParse.Split(charArray);

我怎样才能让它在 Delphi 10.4 Sydney 中工作?

回答

您需要更改此声明:

txtArray : array of String;

对此:

txtArray : TArray<String>;

原因在文档中有详细解释:

类型兼容性和标识 (Delphi)

特别是:

数组类型和赋值

var
Int1: array[1..10] of Integer;
Int2: array[1..10] of Integer;
...
Int1 := Int2;

要使赋值起作用,请将变量声明为:

var
Int1, Int2: array[1..10] of Integer;

或者:

type
IntArray = array[1..10] of Integer;
var
Int1: IntArray; Int2: IntArray;

泛型中的重载和类型兼容性

如果基类型相同(或者是公共类型的别名)并且类型参数相同,则两个实例化的泛型被认为是赋值兼容的。

在 FreePascal 中,Split()返回 a TStringArray,它是 的普通别名array of string,因此与array of string变量赋值兼容。

但在Delphi,Split()返回TArray<String>,这是一个通用的别名array of T,其中Tstring,所以它是一个不同的通用型,所以不分配兼容的array of String变量,只与一个TArray<String>变量。


以上是如何在 Delphi Syndey 10.4 中正确拆分逗号分隔的文本?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>