比如说有一个字符串是 a:='I am a programer'
那我现在想把各个单词分离并放入数组
s[0]:='I'
s[1]:='am'
s[2]:='a'
s[3]:='programer'用什么函数能一次分离?我知道在VB里有split 可以做到 s=split(a,' ') 就可以了,在 delphi 里面有没有类似的函数?
那我现在想把各个单词分离并放入数组
s[0]:='I'
s[1]:='am'
s[2]:='a'
s[3]:='programer'用什么函数能一次分离?我知道在VB里有split 可以做到 s=split(a,' ') 就可以了,在 delphi 里面有没有类似的函数?
解决方案 »
- delphi单步调试总进入反汇编窗口
- 两个DBGrid,两个关联表!
- @@@@####一个奇怪的Free问题####@@@@
- 有创意的问题用hint和数据库进行输入,结了就给100分
- 如何把数据库的内容用TREEVIEW显示成树状?
- TABcontrol控件怎样使用?
- 伤心的人
- fastreport存成的.frf文件能否通过http方式[frReport1.loadfromfile('http://xxx/xxx/xxx.frf')]被调用?
- access 2000数据库中的表中的字段达到120左右,速度异常慢,怎么解决?
- delphi 字符串问题(在线)//
- 在Delphi中如何结合AD用户进行集成认证??
- delphi中#8代表什么?
with TStringList.Create do
try
Text := StringReplace(s, ' ', #13#10, [rfReplaceAll]);
for i := 0 to Count - 1 do
ShowMessage(Strings[i]);
finally
Free;
end;
var
i,k,m:integer;
tStr:String;
begin
k:=0;
m:=Length(Mstr);
for i:=1 to m do
begin
if (Mstr[i] = Sstr[1]) or (i=m) then
begin
Darray[k]:=tStr;
tStr:='';
k:=k+1;
end
else
tStr:=tStr+Mstr[i];
end;
end;//-调用
procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
s:array [0..5] of string;
begin
a:='I am a programer';
self.Split(a,' ',s);
showmessage('ok');
end;
DELPHI里我没找到这个函数,于是自己用POS写了一个,
传的值和 chenylin(陈SIR) 用的一样,一个ARRAY,一个STRING,一个SUBSTRING,
SET 可变ARRAY的长度为1,
在SPILTER里用POS找到第一个SUBSTRING的位置,(如没有,则ARRAY[0]:=STRING)
然后LEFTSTRING将POS前面的部分给ARRAY[0],
SETLENGTH(ARRAY,I) (I是一个自加1的INTEGER)
这样一直加,直到找不到SUBSTRING,
最后再做一次将剩余部分传到最后一个ARRAY[LAST]里。
返回函数值。
非常正确,stringlist功能很好的。
const
a = 'I am a programer';
var
s: TStringList;
i: Integer;
begin
s:=TStringList.Create;
ExtractStrings([' '], [], PChar(a), s);
for i:=0 to s.Count-1 do
showmessage(s[i]);
s.Free;
end;
strs:TStringList;
begin
strs:=TStringList.Create;
strs.Delimiter:=' ';
strs.DelimitedText:='I am a programer'; ShowMessage(strs.Strings[0]);
ShowMessage(strs.Strings[1]);
ShowMessage(strs.Strings[2]);
ShowMessage(strs.Strings[3]);
在CLASSES单元里。有空多看看DELPHI自带的源代码吧,哈哈,接分喽。
begin
memo1.lines.Delimiter:=' ';
memo1.lines.DelimitedText:='I am a programer';end;你就会在memo上看到你要的效果了。。实现原理和“哈欠”的一样。
var
tmp:string;
i,FLen:integer;
begin
flen:=length(st);
splitstr:=tstringlist.Create ;
for i:=1 to flen do
begin
tmp:=tmp+copy(st,i,1);
if tmp<>sp then
begin
if copy(st,i,1)=sp then
begin
splitstr.add(copy(tmp,1,length(tmp)-1));
tmp:='';
end;
end
else
tmp:='';
application.ProcessMessages;
end;
splitstr.add(tmp);
end;
我转成tstringlist的了,转数组也是一样的
TSplitArray=array of string;
PSplitArray=^TSplitArray;
TSplit=class(TStringList)
public
function Split(str:string;Delimiter:string):TSplitArray;
function SplitStr(str:string;Delimiter:string):TSplitArray;
end;{ TSplit }function TSplit.Split(str, Delimiter: string): TSplitArray;
var
i:integer;
begin
if length(Delimiter)>0 then
self.Delimiter := Delimiter[1]
else
self.Delimiter := char(pchar(''));
self.DelimitedText := str;
setLength(result,count);
for i := 0 to count - 1 do
begin
result[i] := Strings[i];
end;
end;function TSplit.SplitStr(str, Delimiter: string): TSplitArray;
var
temp:string;
i:integer;
ArraySize:integer;
begin
temp := str;
ArraySize := 0; while pos(Delimiter,temp) > 0 do
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := copy(temp,1,pos(Delimiter,temp)-1);
System.delete(temp,1,pos(Delimiter,temp)+length(Delimiter)-1);
end;
if temp<>'' then
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := temp;
end;
end;procedure TForm1.BitBtn3Click(Sender: TObject);
var
SplitArray:TSplitArray;
split:TSplit;
i:integer;
begin split := TSplit.Create;
SplitArray := split.Split('I,am,a,boy!',',');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]); SplitArray := split.SplitStr('I,,am,,a,,boy!',',,');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]);
split.Free;
end;测试过的!没问题
strs:TStringList;
begin
strs:=TStringList.Create;
strs.Delimiter:=' ';
strs.DelimitedText:='I am a programer'; ShowMessage(strs.Strings[0]);
ShowMessage(strs.Strings[1]);
ShowMessage(strs.Strings[2]);
ShowMessage(strs.Strings[3]);
strs.free;
end;