STA 单元 (用到 System.SysUtils.TStringHelper):
unit STA; interfaceuses System.SysUtils, System.Classes; type TSta = recordFSeparator: Char; FArr: TArray<TArray<string>>;constructor Create(const aStr: string; const aSeparator: Char = ';'); overload;classoperator Explicit(const aStr: string): TSta;classoperator Implicit(const aStr: string): TSta;function GetItem(i,j: Integer): string;procedure SetItem(i,j: Integer; Value: string);function GetRow(i: Integer): string;procedure SetRow(i: Integer; Value: string);procedure SetSeparator(const Value: Char);function GetRowCount: Integer;procedure SetRowCount(const Value: Integer);function ToString: string;procedure Clear;procedure LoadFromFile(const aFileName: string; aEncoding: TEncoding = nil);procedure SaveToFile(const aFileName: string; aEncoding: TEncoding = nil);property Separator: Char read FSeparator write SetSeparator;property RowCount: Integer read GetRowCount write SetRowCount;property Items[i,j: Integer]: stringread GetItem write SetItem; default;property Rows[i: Integer]: stringread GetRow write SetRow; end; implementation{ TSta }procedure TSta.Clear; begin SetLength(FArr, 0); end; constructor TSta.Create(const aStr: string; const aSeparator: Char); var tArr: TArray<string>; i: Integer; begin FSeparator := aSeparator; tArr := aStr.Split([sLineBreak], ExcludeEmpty); SetLength(FArr, Length(tArr)); for i := 0to High(FArr) do beginFArr[i] := tArr[i].Split([FSeparator]); end; end; function TSta.GetItem(i,j: Integer): string; begin Result := ''; if (i < 0) or (j < 0) then Exit; if (i < Length(FArr)) and (j < Length(FArr[i])) thenResult := FArr[i, j].Trim; end; procedure TSta.SetItem(i,j: Integer; Value: string); var k,n: Integer; begin if Value.Trim = ''then Exit; if Length(FArr) = 0then FSeparator := ';'; n := Length(FArr); if i >= n then beginSetLength(FArr, i+1);for k := n to i - 1do SetLength(FArr[k], 1); end; if j >= Length(FArr[i]) then SetLength(FArr[i], j+1); FArr[i,j] := Value.Trim; end; function TSta.GetRow(i: Integer): string; begin Result := ''; if i < Length(FArr) then beginif Length(FArr[i]) > 0then Result := Result.Join(FSeparator, FArr[i]); end; end; function TSta.GetRowCount: Integer; begin Result := Length(FArr); end; procedure TSta.SetRow(i: Integer; Value: string); var k,n: Integer; begin if Value.Trim = ''then Exit; if Length(FArr) = 0then FSeparator := ';'; n := Length(FArr); if i >= n then beginSetLength(FArr, i+1);for k := n to i - 1do SetLength(FArr[k], 1); end; FArr[i] := Value.Split([FSeparator]); end; procedure TSta.SetRowCount(const Value: Integer); begin SetLength(FArr, Value); end; procedure TSta.SetSeparator(const Value: Char); begin FSeparator := Value; if Length(FArr) = 0then SetLength(FArr, 1); //直接使用索引赋值时, 会根据 Length(FArr) 是否为 0 来设置默认分隔符end; classoperator TSta.Explicit(const aStr: string): TSta; begin Result := TSta.Create(aStr); end; classoperator TSta.Implicit(const aStr: string): TSta; begin Result := TSta.Create(aStr); end; function TSta.ToString: string; var i: Integer; begin if Length(FArr) = 0then Exit(''); Result := Rows[0]; for i := 1to High(FArr) doResult := Result + sLineBreak + Rows[i]; end; procedure TSta.LoadFromFile(const aFileName: string; aEncoding: TEncoding); begin ifnot FileExists(aFileName) then Exit; if aEncoding = nilthen aEncoding := TEncoding.Default; with TStringList.Create dobeginLoadFromFile(aFileName, aEncoding); Self := Text; Free; end; end; procedure TSta.SaveToFile(const aFileName: string; aEncoding: TEncoding); begin if aEncoding = nilthen aEncoding := TEncoding.Default; with TStringList.Create dobeginText := Self.ToString; SaveToFile(aFileName, aEncoding); Free; end; end; end.
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, const
, integer
, end
, length
procedure
tst、ista、tstar、tsta.com、泰安方特tsta,以便于您获取更多的相关知识。
时间: 2024-08-30 14:09:41