Delphi实现字符串的二维表: TSta

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

Delphi实现字符串的二维表: TSta的相关文章

Excel流水表格如何转换为二维表

  同事拿着一张表前来求助(如图1所示),这里的源数据是按照一维的形式显示课节数和教师姓名的课程表,类似于流水账,考虑到打印和张贴课程表的要求,同事希望将其转换为二维表的形式,也就是按照普通的课程那样表按照周数.节数进行显示.由于实际的数据量比较大,手工转换显然是比较麻烦.类似流水账样式的数据表,如何才能转换为实用的样式表格呢? 在Excel2016中,切换到"数据"选项卡,在"获取和转换"功能组依次选择"新建查询→从文件→从工作簿",随后会打开

用jquery包将字符串变成二维码

  将一个字符串(可以是中文,在生成二维码图片之前将中文转码)生成二维码图片,如果想要带log的二维码,可以在生成后的二维码中间部位自己添加一个小log,log图片不要太大,不然就扫描不出内容了. <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="js/jquery-1.8.3.js" type=&quo

动态一维表转换二维表问题!!!

问题描述 这里有一个一维表,如下所示:T1W10T1W20T1W30T2W11T2W21T3W12.........这个表是动态生成的,需要转换成如下二维表:T1T2T3...W1012...W201-1...W30-1-1..................主要难点是T和W的个数不确定,并且有些是没有数据的,例如T3-W2等,当没有数据时需要用-1来进行填充,求各位大虾,把这个一维表转成二维表的sql语句怎么写?谢谢!!! 解决方案 解决方案二:补充一下,数据库中的是一维表,想把它转换成二维表

c++-C++ 字符串 转 二维数组

问题描述 C++ 字符串 转 二维数组 CString aa = "11<225>22<225>33<225>44<000>aa<225>bb<225>cc<225>dd<000>ee<255>ff<255>hh<000>"想转为二维数组 求代码 学习 想转为二维数组 求代码 学习 解决方案 // app1.cpp : Defines the entry

利用jquery包将字符串生成二维码图片_jquery

将一个字符串(可以是中文,在生成二维码图片之前将中文转码)生成二维码图片,如果想要带log的二维码,可以在生成后的二维码中间部位自己添加一个小log,log图片不要太大,不然就扫描不出内容了. 复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="js/jquery-1.8.3.js"

标准的二维表问题

一.问题描述 设 n 是一个正整数, 2*n 的标准二维表是由正整数 1, 2, ..., 2*n 组成的2*n 数组, 该数组的每行从左到右递增, 每列从上到下递增. 2*n 的标准二维表全体记为 Tab(n). 譬如: 当 n = 3 时 Tab(3) 如下: 1 2 3     1 2 4   1 2 5    1 3 4     1 3 5 4 5 6     3 5 6   3 4 6    2 5 6     2 4 6   二.问题分析 同学说就是卡塔南数.下面的是组合数公式 1

c++-怎么用二维数组储存字符串

问题描述 怎么用二维数组储存字符串 类似于杨辉三角或者是ABCDEF环绕成正方形打印我想看能不能用二维数组控制他们循环打印数字我用二维数组能控制循环,但不知怎么在二维数组里储存字符串,是用数组指针吗?大神们能给个杨辉三角但是数学换成字符串的例子吗?类似图中用二维数组做怎么表示 解决方案 字符串转成二维数组C#二维数组及字符串操作C++ 字符串和二维数组索引 解决方案二: http://blog.csdn.net/qq_27183003/article/details/49699463http:/

使用zxing工具包创建和解析二维码

关于二维码是什么,以及二维码是如何生成的,我也没有研究得很深入,就不多说了,以免误导大家.请参看: java 二维码原理以及用java实现的二维码的生成.解码 二维码的生成细节和原理 下面是一个可以生成和解析二维码的工具类,该类用到了zxing工具包,我通过Maven去下载的: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 <dependencies>     <!-- JavaSE包依赖于Core包,因此Core包不需要直接依赖了     <dependency

关于 二维码 与 NFC 之间的出身贫贱说

关于 二维码 与 NFC 之间的出身贫贱说 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 二维码,这个大家都非常了解了,用微信一扫,添加好友了:用360手机助手一扫,软件下载了:这是在传递一串