# Object - TStringList 字符串列表

## `TStringList`

声明：class

提供字符串集合存储、查找、排序和名称值管理能力的内置对象

<!-- tags: Object TStringList 字符串列表 排序 sort 查找 搜索 lookup 数组 列表 array list 创建 生成 构造函数 实例化 new -->

### `create()`

声明：function

无参数构造函数。创建空的 TStringList 实例

<!-- tags: Object TStringList 字符串列表 创建 生成 数组 列表 array list 字符串 文本 string -->

可见性：public

### `add(s)`

声明：function

添加字符串

<!-- tags: Object TStringList 字符串列表 添加 追加 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数 | 类型   | 说明                     |
| ---- | ------ | ------------------------ |
| `s`  | string | 字符串类型，添加的字符串 |

返回：integer

#### 示例

```tsl
obj:=CreateObject('TStringList');
obj.CommaText:='A=ABC,B=123,C=abc';
index:=obj.Add("X=DDD");
echo index;
sN:=obj.count;
r:=array();
for i:=0 to SN-1 do
begin
r[i,'n']:=obj.Names(i);
r[i,'v']:=obj.values(obj.Names(i));
end
return r;
```

### `addStrings(strings)`

声明：function

将Strings里的字符串批量添加

<!-- tags: Object TStringList 字符串列表 添加 追加 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数      | 类型        | 说明                                |
| --------- | ----------- | ----------------------------------- |
| `strings` | TStringList | TStringList或者其他TStrings派生类型 |

返回：any

#### 示例

```tsl
obj := CreateObject("TStringList");
obj.CommaText := "A=ABC,B=123,C=abc";
obj2 := CreateObject("TStringList");
obj2.CommaText := "A=DDD,G=666";
obj.AddStrings(obj2);
return obj.CommaText;
// 输出：A=ABC,B=123,C=abc,A=DDD,G=666
```

### `append(s)`

声明：function

添加字符串，与Add相同，但不返回索引号

<!-- tags: Object TStringList 字符串列表 添加 追加 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数 | 类型   | 说明                     |
| ---- | ------ | ------------------------ |
| `s`  | string | 字符串类型，添加的字符串 |

返回：any

### `assign(src)`

声明：function

将内容复制成和src里的内容一样

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

| 参数  | 类型        | 说明                                          |
| ----- | ----------- | --------------------------------------------- |
| `src` | TStringList | TStringList或者其他TStrings派生类型，复制的源 |

返回：any

#### 示例

```tsl
obj:=CreateObject('TStringList');
obj.Delimiter:=";";
obj.DelimitedText:='A=DDD;G=666';
obj2:=CreateObject('TStringList');
obj2.Delimiter:=",";
obj2.Assign(obj);//复制
return array(obj2.Delimiter,obj2.DelimitedText);
```

### `clear()`

声明：function

清除掉所有内容

<!-- tags: Object TStringList 字符串列表 清除 重置 数组 列表 array list 字符串 文本 string -->

可见性：public

返回：any

### `delete(index)`

声明：function

删除指定索引

<!-- tags: Object TStringList 字符串列表 删除 移除 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数    | 类型    | 说明                   |
| ------- | ------- | ---------------------- |
| `index` | integer | 整数类型，删除的索引号 |

返回：any

### `equals(src)`

声明：function

比较两个内容是否相同

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

| 参数  | 类型        | 说明                                            |
| ----- | ----------- | ----------------------------------------------- |
| `src` | TStringList | TStringList或者其他TStrings派生类型，比较的对象 |

返回：any

### `exChange(index1, index2)`

声明：function

将两个位置的内容互相交换

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

| 参数     | 类型    | 说明                  |
| -------- | ------- | --------------------- |
| `index1` | integer | 整数类型，互换的位置1 |
| `index2` | integer | 整数类型，互换的位置2 |

返回：any

#### 示例

```tsl
obj:=CreateObject('TStringList');
obj.CommaText:='A=ABC,B=123,C=abc';
obj.ExChange(0,2);
return obj.CommaText;
```

### `find(s, index)`

声明：function

查找字符串。仅对已经排序好的TStringlist有效，未排序的请用IndexOf

<!-- tags: Object TStringList 字符串列表 排序 sort 查找 搜索 lookup 数组 列表 array list -->

可见性：public

| 参数    | 类型    | 说明                         |
| ------- | ------- | ---------------------------- |
| `s`     | string  | 字符串类型，查找的字符串     |
| `index` | integer | 整数类型。返回查找到的索引号 |

返回：boolean

#### 示例

```tsl
obj:=CreateObject('TStringList');
obj.Sorted:=1;
obj.CommaText:='C=456.,D=abc,A=ABC,E=666,F=A123,B=123';
f:=obj.Find("E=666",Index);
if f then return Index;
else return '查找失败';
```

### `indexOf(s)`

声明：function

返回字符串所在的索引号。查找与大小写敏感设置有关

<!-- tags: Object TStringList 字符串列表 查找 搜索 lookup 返回 获取 数组 列表 array list -->

可见性：public

| 参数 | 类型   | 说明                     |
| ---- | ------ | ------------------------ |
| `s`  | string | 字符串类型，查找的字符串 |

返回：integer

### `indexOfName(name)`

声明：function

返回Name键值所在的索引号

<!-- tags: Object TStringList 字符串列表 返回 获取 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数   | 类型   | 说明                                             |
| ------ | ------ | ------------------------------------------------ |
| `name` | string | 字符串类型，查找的Name=Value中的Name所在的索引号 |

返回：integer

### `insert(index, s)`

声明：function

插入字符串在指定索引号。仅未排序的场景适用，已排序的情况请用 Add

<!-- tags: Object TStringList 字符串列表 排序 sort 添加 追加 数组 列表 array list 字符串 -->

可见性：public

| 参数    | 类型    | 说明                     |
| ------- | ------- | ------------------------ |
| `index` | integer | 整数类型，插入的位置     |
| `s`     | string  | 字符串类型，插入的字符串 |

返回：any

### `loadFromFile(alias, file_name)`

声明：function

从指定的文件中加载内容

<!-- tags: Object TStringList 字符串列表 读取 获取 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数        | 类型   | 说明                                                    |
| ----------- | ------ | ------------------------------------------------------- |
| `alias`     | string | 字符串类型，目录别名。如果有系统权限，可以为空字符串    |
| `file_name` | string | 字符串类型，文件名，如果Alias为空，则为带全路径的文件名 |

返回：any

#### 示例

```tsl
LJ:="E:\\Test\\Case-save.txt";
obj:=CreateObject('TStringList');
obj.LoadFromFile('',LJ);
return obj.CommaText;
```

### `loadFromStream(stream)`

声明：function

从指定的流中加载内容

<!-- tags: Object TStringList 字符串列表 读取 获取 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数     | 类型    | 说明                       |
| -------- | ------- | -------------------------- |
| `stream` | TStream | 流类型，如文件流，内存流等 |

返回：any

#### 示例

```tsl
ws := new TMemoryStream();
ws.write("A=aaa",5);
ws.position:=0;
obj:=CreateObject('TStringList');
obj.LoadFromStream(ws);
return obj.CommaText;
```

### `move(cur_index, new_index)`

声明：function

将指定位置的内容移动到新位置

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

| 参数        | 类型    | 说明                               |
| ----------- | ------- | ---------------------------------- |
| `cur_index` | integer | 整数类型，需要移动的内容的原始位置 |
| `new_index` | integer | 整数类型，移动到的新位置索引       |

返回：any

### `names(index)`

声明：function

取第Index个Name=Value串的Name串。Index从0开始

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

| 参数    | 类型 | 说明  |
| ------- | ---- | ----- |
| `index` | any  | index |

返回：string

### `saveToFile(alias, file_name)`

声明：function

将内容存贮到指定的文件中

<!-- tags: Object TStringList 字符串列表 写入 保存 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数        | 类型   | 说明                                                    |
| ----------- | ------ | ------------------------------------------------------- |
| `alias`     | string | 字符串类型，目录别名。如果有系统权限，可以为空字符串    |
| `file_name` | string | 字符串类型，文件名，如果Alias为空，则为带全路径的文件名 |

返回：any

#### 示例

```tsl
path_name := "tstringlist-save-example.txt";
obj := CreateObject("TStringList");
obj.Text := %%text
first line
second line%%text;
obj.SaveToFile("", path_name);
echo fileExists("", path_name), "\n";
fileDelete("", path_name);
// 输出：1
```

### `saveToStream(stream)`

声明：function

将内容保存到指定的流中

<!-- tags: Object TStringList 字符串列表 写入 保存 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数     | 类型    | 说明                       |
| -------- | ------- | -------------------------- |
| `stream` | TStream | 流类型，如文件流，内存流等 |

返回：any

#### 示例

```tsl
ws := new TMemoryStream();
obj:=CreateObject('TStringList');
obj.Text:= 'A a
B b
C c
D d
';
obj.SaveToStream(ws);
return ws.size; //返回20
```

### `setText(text)`

声明：function

设置text的内容，与设置属性Text的操作相同

<!-- tags: Object TStringList 字符串列表 设置 修改 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数   | 类型   | 说明                   |
| ------ | ------ | ---------------------- |
| `text` | string | 字符串类型，设置的内容 |

返回：any

### `sort()`

声明：function

排序

<!-- tags: Object TStringList 字符串列表 排序 sort 数组 列表 array list 字符串 文本 string -->

可见性：public

返回：any

### `strings(index)`

声明：function

取或者设置指定索引的字符串。下标从0开始

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

| 参数    | 类型 | 说明  |
| ------- | ---- | ----- |
| `index` | any  | index |

返回：string

#### 示例

```tsl
obj:=CreateObject('TStringList');
obj.Delimiter:=";";
obj.DelimitedText:='A=ABC;B=123;C=456.;D=abc';
return obj.strings(1); //读
```

### `stringsW(index)`

声明：function

取或者设置指定索引的字符串。功能同Strings，区别在于读取时StringsW返回的是宽字节字符串，而Strings返回的是多字节字符串

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

| 参数    | 类型 | 说明  |
| ------- | ---- | ----- |
| `index` | any  | index |

返回：string

### `valueFromIndex(index)`

声明：function

读取或写入第Index个串的Value值。Index下标从0开始

<!-- tags: Object TStringList 字符串列表 读取 获取 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数    | 类型 | 说明  |
| ------- | ---- | ----- |
| `index` | any  | index |

返回：string

#### 示例

```tsl
obj:=CreateObject('TStringList');
obj.Delimiter:=";";
obj.DelimitedText:='A=ABC;B=123;C=456.;D=abc';
s0:=obj.ValueFromIndex(1);//读取第1个
obj.ValueFromIndex(1):="888"; //写入，即给指定位置的value重新赋值
return array(s0,obj.DelimitedText);
```

### `values(name)`

声明：function

设置或者取得Name=Value模式串中指定的Name的Value值

<!-- tags: Object TStringList 字符串列表 设置 修改 数组 列表 array list 字符串 文本 string -->

可见性：public

| 参数   | 类型 | 说明 |
| ------ | ---- | ---- |
| `name` | any  | name |

返回：string

#### 示例

```tsl
obj:=CreateObject('TStringList');
obj.Delimiter:=";";
obj.DelimitedText:='A=ABC;B=123;C=456.;D=abc';
SN:=obj.count;
r:=array();
for i:=0 to SN-1 do
begin
r[i,'name']:=obj.Names(i);//获取name值
r[i,'value']:=obj.values(obj.Names(i));//获取指定name对应的value值
end
return r;
```

### `Capacity`

声明：property

容量，如果已知需要的字符串比较多，预先设置容量会有比较好的性能

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：integer

访问：read/write

### `CaseSensitive`

声明：property

大小写敏感，决定排序或者查找时是否大小写敏感。设置为真则表示大小写敏感，为假为大小写不敏感，默认为假

<!-- tags: Object TStringList 字符串列表 排序 sort 查找 搜索 lookup 数组 列表 array list -->

可见性：public

类型：boolean

访问：read/write

### `CommaText`

声明：property

逗号分割串。将每个字符串用,分割连接起来。若字符串中间有逗号，则在字符串两头加"号（注，单引号无效），若字符串中还包含"号，如字符串' 3,a"bc'，则用'"3,a""bc"'表达

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：string

访问：read/write

### `CommaTextW`

声明：property

功能同CommaText，区别是在读取时CommaTextW返回为宽字节字符串，而CommaText返回的是多字节字符串

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：string

访问：read/write

### `Count`

声明：property

获取字符串个数

<!-- tags: Object TStringList 字符串列表 获取 查询 数组 列表 array list 字符串 文本 string -->

可见性：public

类型：integer

访问：read

### `DelimitedText`

声明：property

用分割符连接起来的单个字符串。连接符用Delimiter属性指定，默认为逗号。而当字符串中存在连接符时，用QuoteChar加在字符串两端。当QuoteChar为"，且Delimiter为逗号时，DelimitedText的结果和CommaText一样

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：string

访问：read/write

### `Delimiter`

声明：property

DelmitedText所依赖的连接符，默认为逗号

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：string

访问：read/write

### `Duplicates`

声明：property

重复串时的行为控制，0：忽略重复串（默认值），1：允许重复串，2：重复串出错。排序时有效

<!-- tags: Object TStringList 字符串列表 排序 sort 数组 列表 array list 字符串 文本 string -->

可见性：public

类型：integer

访问：read/write

### `GetText`

声明：property

获取Text的值

<!-- tags: Object TStringList 字符串列表 获取 查询 数组 列表 array list 字符串 文本 string -->

可见性：public

类型：string

访问：read

### `GetTextW`

声明：property

获取Text的值，并以宽字符串类型返回

<!-- tags: Object TStringList 字符串列表 获取 查询 数组 列表 array list 字符串 文本 string -->

可见性：public

类型：string

访问：read

### `NameValueSeparator`

声明：property

Name,Value之间的间隔符，默认为=

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：string

访问：read/write

### `QuoteChar`

声明：property

DelmitedText所依赖的引号符。一般在串中存在分割符时使用

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：string

访问：read/write

### `Sorted`

声明：property

是否已经排序，设置为真则进行排序

<!-- tags: Object TStringList 字符串列表 排序 sort 数组 列表 array list 字符串 文本 string -->

可见性：public

类型：boolean

访问：read/write

### `Text`

声明：property

以回车换行分割每个字符串连接起来的单个串。如果存在包括回车换行的串，就会有混淆，如果要没有混淆，则需要用DelmitedText或者CommaText

<!-- tags: Object TStringList 字符串列表 数组 列表 array list 字符串 文本 string text 对象 -->

可见性：public

类型：string

访问：read/write

### `TextW`

声明：property

功能同Text，区别在于在读取时TextW返回为宽字节字符串，而Text返回的是多字节字符串

<!-- tags: Object TStringList 字符串列表 读取 获取 数组 列表 array list 字符串 文本 string -->

可见性：public

类型：string

访问：read/write
