今天偶尔要做的Delphi程序,其中涉及到了字符串处理,里面有一个功能类似于VB里的split()函数的功能,于是查了很久才查到些资料,现将这些资料整理一下,方便大家.
首先是一个网友自己编的函数.实现了和split()函数的功能.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type userarray=array of string;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
function split(s: string; dot: char): userarray;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses StrUtils;
{$R *.dfm}
//按所给字符将字符串分隔成数组
function TForm1.split(s:string;dot:char):userarray;
var
str:userarray;
i,j:integer;
begin
i:=1;
j:=0;
SetLength(str, 255);
while Pos(dot, s) > 0 do //Pos返回子串在父串中第一次出现的位置.
begin
str[j]:=copy(s,i,pos(dot,s)-i);
i:=pos(dot,s)+1;
s[i-1] := chr(ord(dot)+1);
j:=j+1;
end;
str[j]:=copy(s,i,strlen(pchar(s))-i+1);
result:=str;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ur:userarray;
i:Integer;
begin
ur:=split(Edit1.Text,';');
for i :=0 to 255 do
begin
if length(ur[i])=0 then Exit;
ShowMessage(ur[i]);
end;
end;
end.
说明,测试这个代码时请在窗体上放一个文本编辑框和一个按钮,字符串是以';'号分割的;
第二种方法比较简单:
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。
常规的用法大家都知道,现在来讨论它的一些高级的用法。
先把要讨论的几个属性列出来:
1、CommaText
2、Delimiter & DelimitedText
3、Names & Values & ValueFromIndex
先看第一个:CommaText。怎么用呢?用代码说话:
const
constr :String = 'aaa,bbb,ccc,ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.CommaText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
执行了这段代码后,可以看到ShowMessage显示出来的分别是:aaa bbb ccc ddd。
也就是说,strs.CommaText := constr这一句的作用,就是把一个字符串以','为分割符,分段添加到TStrings中。
那么如果不是以','来分割,又该怎么做呢?现在看第二个例子。使用Delimiter和DelimitedText。
const
constr :String = 'aaa\bbb\ccc\ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
可以看到, 显示的效果和第一个例子是一模一样的。解释一下:
Delimiter为分隔符,默认为:','。DelimitedText就是按Delimiter为分隔符的一个串,得到赋值后回把这个字符串按Delimiter的字符添加到TStrings中。
说到这里,有想起一个属性,QuoteChar。其默认值为:'"'(不包括单引号)
有何用呢?看例子:
const
constr :String = '"aaa"\"bbb"\"ccc"\"ddd"';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
显示出来的仍然是aaa bbb ccc ddd。为什么不是:"aaa" "bbb" "ccc" "ddd"呢?
再来看一个例子:
const
constr :String = '|aaa|\|bbb|\|ccc|\|ddd|';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.Delimiter := '\';
strs.QuoteChar := '|';
strs.DelimitedText := constr;
for i := 0 to Strs.Count-1 do
ShowMessage(Strs[i]);
end;
显示出来的又是aaa bbb ccc ddd。对比一下,应该不难明白吧?这个就不多说了,用得也不多。
但是还要多说一句,当Delimiter为:','而QuoteChar为:'"'时,DelimitedText和CommaText是同等的。
最后要说的三个是:Names & Values & ValueFromIndex。
看看下面的代码:
const
constr :String = '0=aaa,1=bbb,2=ccc,3=ddd';
var
strs :TStrings;
i :Integer;
begin
strs := TStringList.Create;
strs.CommaText := constr;
for i := 0 to strs.Count-1 do
begin
ShowMessage(strs.Names[i]);
ShowMessage(strs.Values[strs.Names[i]]);
ShowMessage(strs.ValueFromIndex[i]);
end;
end;
通过这个例子不难看出:
这个时候strs中的内容是:
0=aaa
1=bbb
2=ccc
3=ddd
而Names中则是:
0
1
2
3
在Values中则是:
aaa
bbb
ccc
ddd
http://blog.csdn.net/mc1035/archive/2007/05/16/1611214.aspx
分享到:
相关推荐
本文将深入探讨Delphi中的字符串分割技术,通过一个具体的示例源码来展示如何实现这一功能。 Delphi 是一个强大的Windows应用程序开发环境,它基于Pascal编程语言。在Delphi中,我们通常使用内置的字符串类型`...
在Delphi编程环境中,处理字符串是一项常见的任务,而“按字符串分割”是字符串操作中的一个核心功能。在Delphi中,我们可以使用内建的函数或类来实现这一操作,例如`SplitString`函数或者`TStringList`类。本文将...
本文将详细讲解如何在Delphi 7中进行字符串分割,以满足不同需求。 首先,我们需要了解Delphi 7中的字符串类型。在Delphi中,基本的字符串类型是`string`,它实际上是基于Pascal的`AnsiString`实现的,支持Unicode...
在Delphi编程环境中,处理中文和英文混合的字符串截取是一项常见的任务,特别是在涉及到文本处理、数据解析或者用户界面展示时。由于Unicode编码的存在,中文字符通常占据两个字节,而英文字符则占据一个字节,这就...
### Delphi字符串分割函数整理 在Delphi编程环境中,字符串处理是极其常见且重要的操作之一。对于字符串的分割尤其在数据解析、配置文件读取等场景下应用广泛。本文将详细整理并解释几种常用的字符串分割函数及其...
`SplitString`函数是`System.StrUtils`单元中的成员,它可以基于指定的分隔符将字符串分割成一个字符串列表。例如: ```delphi uses System.SysUtils, System.StrUtils; var OriginalString, Delimiter: ...
在Delphi中,16进制字符串转换为整数或字节数组,以及将整数或字节数组转换为16进制字符串,有多种方法。我们可以使用系统提供的函数,如`Hex`和`IntToHex`来进行转换。 1. **16进制字符串转整数**: - 使用`...
// 清除字符串中的内容 if Length(s) = 0 then // 长度为0 Exit; p := Pos(Separator, s); while P <> 0 do begin hs := Copy(s, 1, p - 1); // 复制字符 Terms.Add(hs); // 添加到列表 Delete(s, 1, p + ...
3. **多线程处理**:对于非常大的字符串,可以将字符串分割成多个部分并使用多线程进行并行替换,从而利用多核处理器的优势。 4. **避免不必要的复制**:在替换过程中,只复制必要的字符,而不是整个字符串。 `Q_...
根据给定的文件信息,我们可以总结出以下关于 Delphi 分割...通过以上分析,我们可以看出该函数实现了一种较为常见的字符串分割操作,并且在处理过程中注意到了空字符串的情况,从而确保了返回结果的有效性和准确性。
在Delphi编程环境中,字符拆分是一个常见的任务,特别是在处理字符串和数据操作时。"DELPHI7一个简单的字符拆分"这个标题所指的就是在Delphi 7中实现一个功能,将一个字符串按照特定规则分解成多个子字符串。描述中...
在Delphi编程环境中,我们经常会遇到需要处理字符串集合的情况,特别是在数据处理、文件解析或用户界面展示时。这里,我们将探讨如何使用`TStringList`类来分割由特定字符(如分号)隔开的字符串,并将结果在`...
- 在每次循环中,使用`Pos`函数定位特殊分割字符串在当前源字符串中的位置,并据此截取子串。 - 更新`iCutCount`计数器,直到达到所需的索引位置。 ```delphi iCutCount := 1; while iCutCount begin i :=...
### 高效中英文字符串截取方法 #### 知识点概述 本文将详细介绍一种用于高效截取中英文混合字符串的方法。该方法适用于处理大量数据(例如10万条记录),能够在极短的时间内(例如1秒)完成所需的操作。这种方法...
例如: 字符串: D:\受理图片\A01F201103\ 完全分割: D: 受理图片 A01F201103 按级分割: D: D:\受理图片 D:\受理图片\A01F201103 D:\受理图片\A01F201103\ 按级分割后创建文件夹
例如,在Delphi中,我们可以使用`StringList`类的`DelimitedText`属性结合`CommaText`来实现以逗号为分隔符的字符串分割: ```delphi var Str: string; List: TStrings; begin Str := 'apple,banana,grape'; ...
例如,Java中的`StringTokenizer`,JavaScript的`split()`,或Delphi(根据提供的文件名可能是使用的编程环境)中的`SplitString`函数等,都可以用来处理逗号字符串。 6. **文件处理**: 在处理CSV文件时,除了...
3. 分割该字符串,创建`TList<String>`的元素。 ### 4. `TList<String>` 转 `stringstream (TStringStream)` 这个转换同样直观: 1. 创建一个`TStringStream`实例。 2. 遍历`TList<String>`,将每个字符串写入`...
“字符串处理”则是指在编程中对文本字符串的操作,如查找、替换、分割、格式化等常见任务。 根据这些信息,我们可以预期课程内容可能包括以下部分: 1. SQLite3简介:介绍SQLite3的基本概念、架构和特性,以及为...
`这行代码会将`constr`字符串按照逗号分割,并将结果分别存入`TStringList`的各个元素中。在提供的代码中,`ShowMessage`将依次显示`aaa`、`bbb`、`ccc`和`ddd`。 如果分隔符不是逗号,我们可以使用`Delimiter`属性...