delphi中字符串的操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中字符串的操作相关的知识,希望对你有一定的参考价值。
有一行字符串:
["uid":12458265,"real_name":"\u8521\u52b2\u677e","real_name_unsafe":"\u8521\u52b2\u677e","uid":14139408,"real_name":"\u9648\u67f3\u8c0a","real_name_unsafe":"\u9648\u67f3\u8c0a"]
在Delphi中怎么样才能把这行字符串变成下面格式输出:
12458265
\u8521\u52b2\u677e
14139408
\u9648\u67f3\u8c0a
定义两个tstringlist类型的
第一个用来存放UID不同的。从你上边看,是以‘,’为区分标志的。
第二个用来详细划分。
strlist1:=SplitStr(str,',');
for i:=0 to strlist1.count-1 do
strlist2.clear;
strlist2:=splitstr(strlist1.strings[i],',');
得到的是"uid":12458265形式的,然后再处理,应该没什么问题吧。
function db(str: string): string;
begin
result := StringReplace(str, '"', '', [rfReplaceAll]);
end;
function d(str: string): string;
begin
result := StringReplace(str, '[', '', [rfReplaceAll]);
result := StringReplace(str, ']', '', [rfReplaceAll]);
end;
function SplitStr(s, de: string): TStringList;
var
i, j, l: integer;
t, p: string;
begin
l := Length(s);
t := '';
Result := TStringList.Create();
i := 1;
while i < l do
begin
p := '';
for j := 0 to length(de) - 1 do
p := p + s[i + j];
if uppercase(p) = uppercase(de) then
begin
Result.Add(t);
t := '';
i := i + length(de) - 1;
end
else
t := t + s[i];
i := i + 1;
end;
Result.add(t);
end;
var
str: string;
strlist1, strlist2: tstringlist;
i, j: integer;
begin
str := memo1.Lines.Text;
str := d(str);
strlist1 := TStringList.Create;
strlist2 := TStringList.Create;
strlist1 := SplitStr(str, '');
for i := 0 to strlist1.Count - 1 do
begin
strlist2.Clear;
str := strlist1.Strings[i];
strlist2 := SplitStr(str, ',');
for j := 0 to strlist2.Count - 1 do
begin
str := strlist2.Strings[j];
str := Copy(str, Pos(':', str) + 1, Length(str));
ListBox1.Items.Add(db(str));
end;
end;
strlist1.Free;
strlist2.Free;
end; 参考技术A 下面的程序在DELPHI7下调试通过,你可以参考:
program exp;$apptype console$
var s:string='["uid":12458265,"real_name":"\u8521\u52b2\u677e","real_name_unsafe":"\u8521\u52b2\u677e","uid":14139408,"real_name":"\u9648\u67f3\u8c0a","real_name_unsafe":"\u9648\u67f3\u8c0a"]';
var i,j:integer;
begin
repeat
i:=pos('uid":',s);j:=pos(',"real_name',s);writeln(copy(s,i+5,j-i-5));delete(s,1,j);
i:=pos('real_name":',s);j:=pos('","real_name_u',s);writeln(copy(s,i+12,j-i-12));delete(s,1,j);
j:=pos('',s);delete(s,1,j);
until (i=0)or(j=0);
end.
运行结果是:
E:\ygb>dcc32 b.dpr
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
b.dpr(10)
11 lines, 0.09 seconds, 11484 bytes code, 1805 bytes data.
E:\ygb>b.exe
12458265
\u8521\u52b2\u677e
14139408
\u9648\u67f3\u8c0a 参考技术B 如果 你希望用 正则式的 话,用perlreg控件。
不然就像楼上那样分,一个while 语句 然后posex来查找字串。然后copy出来。 参考技术C 阳光上的桥,懂N多计算机语言,我的偶像。
数据库操作语句中变量的使用 - Delphi
delphi及sql的语句中,字符串都需要用单引号,为了处理方便以及安全考虑,我使用了参数,刚从网上搜的是这样的方式:
cmd.Parameters.CreateParameter()
含有四个参数,麻烦不说,还总是出错,甚是烦人,后来查阅资料,改成下面的方式,就没那么多事了。
sql:=‘UPDATE tb_register SET reg_username = :UN,reg_password = :PW,‘ +‘reg_check = :CK,reg_readme = :RM,reg_memo = :MO WHERE id = :ID‘; cmd.CommandText:=sql; cmd.Parameters.ParamByName(‘UN‘).Value:= edit1.Text; cmd.Parameters.ParamByName(‘PW‘).Value:= edit2.Text; cmd.Parameters.ParamByName(‘RM‘).Value:= edit3.Text; cmd.Parameters.ParamByName(‘MO‘).Value:= edit4.Text; cmd.Parameters.ParamByName(‘CK‘).Value:= ckd; cmd.Parameters.ParamByName(‘ID‘).Value:= edit5.Text;
以上是关于delphi中字符串的操作的主要内容,如果未能解决你的问题,请参考以下文章