Delphi中怎样将字符串按给定字符分隔(类似split函数的功能)

Delphi中怎样将字符串按给定字符分隔(类似split函数的功能)

分类:            Delphi2007-05-16 11:094911人阅读评论(2)收藏举报

delphiintegerstringbutton文本编辑function

今天偶尔要做的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.

说明,测试这个代码时请在窗体上放一个文本编辑框和一个按钮,字符串是以‘;‘号分割的;

第二种方法比较简单:

TStringList的用法

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

我看了这个资料后按照上面的例子用了,但是发现","号做为分隔符时好用,自己用strs.Delimiter =‘;‘更改不了分隔符,不知为什么,不过能直接用‘,‘号分隔已经完成了我想要的功能了,希望哪为高手能指点一下

时间: 2024-12-25 10:35:31

Delphi中怎样将字符串按给定字符分隔(类似split函数的功能)的相关文章

Delphi 中Format的字符串格式化使用说明(转)

源:Delphi 中Format的字符串格式化使用说明(转) 一.Format函数的用法 Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用: 首先看它的声明: function Format(const Format: string; const Args: array of const): string; overload; 事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,但并不多用

Delphi中stringlist分割字符串的用法

Delphi中stringlist分割字符串的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaText 2.Delimiter &DelimitedText 3.Names &Values &ValueFromIndex 先看第一个:CommaText.怎么用呢? const constr :String = 'aaa,bbb,ccc,ddd'; var strs :TStrin

Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数

Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数 //字符串分割: Split var   reg: TPerlRegEx;   List: TStrings; begin   List := TStringList.Create;   reg := TPerlRegEx.Create(nil);   reg.Subject := 'aaa,bbb,ccc,ddd';   reg.RegEx  := ','; {这里可是运行相当复杂的分割符啊}   reg

delphi 中一种好用的数组定义方法以及函数嵌套的使用源代码

type TByteBuff;= array of integer; function abc(a:integer):TByteBuff;; var tempArr:TByteBuff; begin setlength(tempArr,2); tempArr[0] := a; tempArr[1] := a + 10; result:=tempArr; end; procedure TForm1.Button1Click(Sender: TObject); var a : integer; be

EL表达式中如何截取字符串

EL表达式中如何截取字符串 可以截取,用fn函数:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 下面是JSTL中自带的方法列表以及其描述 函数名 函数说明 使用举例 fn:contains 判定字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchString)}"> fn:c

node中转换URL字符串与查询字符串

一个完整的URL字符串中,从"?"(不包括?)到"#"(如果存在#)或者到该URL字符串结束(如果不存在#)的这一部分称为查询字符串. 可以使用Query String模块中的parse方法将该字符串转换为一个对象,parse方法的使用方式如下所示: querystring.parse(str,[sep],[eq],[options]); str表示被转换的查询字符串, sep.字符串中的分隔符,默认是& eq.该字符串中的分配符,默认为=."=&

js使用split函数按照多个字符对字符串进行分割的方法

这篇文章主要介绍了js使用split函数按照多个字符对字符串进行分割的方法,实例分析了split函数的使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了js使用split函数按照多个字符对字符串进行分割的方法.分享给大家供大家参考.具体分析如下: js中的split()函数可以对字符串按照指定的符号进行分割,但是如果字符串中存在多个分割符号,js的split()函数是否还可以胜任呢,答案是肯定的,js的split()函数可以通过正则表达式实现多分隔符的字符串分割,调用也很简单,下面

PHP开发中常用的字符串操作函数

1,拼接字符串 拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号.=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行定义,这样做是比较有好处的. 2,替换字符串 在PHP这门语言中,提供了一个名字叫做substr_replace()的函数,该函数的作用可以快速的完成扫描和编辑文本内容较多的字符串替换功能.他的语法格式: mixed substr_replace(mixed $string,string $repl

Delphi中ARC内存管理的方向

随着即将发布的10.3版本,RAD Studio R&D和PM团队正在制作Delphi在内存管理方面的新方向. 几年前,当Embarcadero开始为Windows以外的平台构建新的Delphi编译器时,就核心语言功能和语言的整体感知而言,有很多讨论新Delphi与当前语言的兼容性.最终出现的决定是保持极高程度的兼容性,并采用一些重要而大胆的步骤来实现更能吸引新一代开发人员的语言. 什么是自动参考计数? (具有弱引用的交叉链接对象) 其中一个变化就是决定采用新的移动平台内存管理模式,遵循Appl