如何在 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,其中T是string,所以它是一个不同的通用型,所以不分配兼容的array of String变量,只与一个TArray<String>变量。