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

给你一个字符串分割函数,当年我做163图片下载的时候写的。
定义两个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中字符串的操作的主要内容,如果未能解决你的问题,请参考以下文章

Delphi StringGrid常用属性和常用操作

delphi字符串操作集

delphi调用dll函数 字符串参数

delphi中类型转换如把一个字符串转成整型,这个装换过程执行了啥操作呢?有点不能理解

数据库操作语句中变量的使用 - Delphi

Delphi操作ACCESS技巧集