根据指定的字符,截取不同长度的字符串

yanele 2009-01-12 09:44:59
比如SQL数据库里一个表里的某一字段存储着这样一段信息:
500000名称
=
1199
AND编号
LIKE
20061215
AND

或者类似下面的代码,格式差不多,但需要的字符长度不一定一样

500000部门编号
=
016
AND单据日期
>=
2007-01-29
AND


问题:如何将上面的信息分段取出来
第一行之前为一段;
第一行之后为一段;
第二行为一段;
第三行为一段;
第四行之前为一段;
第四行之后为一段;
第五行为一段;
第六行为一段;
可能后面会接很多信息,以此类推!?
...全文
494 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanele 2009-01-19
  • 打赏
  • 举报
回复
用StringList可以分别读出相关信息了,但怎么赋值给DBGrid不同的行与列呢?
garnel 2009-01-16
  • 打赏
  • 举报
回复
给个思路:
1、读取一条记录,存入一临时变量
2、读取。之前的内容,存入一数组中,删除。之前的内容,重复执行,直至本记录内容判断完成。
3、重复进行以上内容,直至全部记录读取完成。
4、判断数组中的内容,是否逻辑值,有就按要求替换
5、设置DBGrid组件的列数,并将数组中的内容填入。

建议你用stringgrid组件,处理起来方便一些。
yanele 2009-01-16
  • 打赏
  • 举报
回复
不是楼上这个意思,数据库里的信息不是固定不变的,如"500000"可能是"50","部门编号"可能是"操作人员","单据日期"可能是"审核日期",符号也能是=,>,>=,<,<=,like等任意符号,如果按照楼上的方法是行不通的,现在最关键是要达到第9贴时提的要求!
window_8888 2009-01-16
  • 打赏
  • 举报
回复
var
ls: TStringList;
str: string;
begin
ls := TStringList.Create;
str := '500000'#8'部门编号'#13#10 +
'='#13#10 +
'016'#13#10 +
'OR'#8'单据日期'#13#10 +
'>='#13#10 +
'20090115'#13#10 +
'ADD'#8#13#10;

ls.Delimiter := #8;
ls.DelimitedText := str;
ShowMessage(ls.Text);
ls.Free;
end;

这是完整代码,照此无误
yanele 2009-01-15
  • 打赏
  • 举报
回复
没有达到我想要的结果,同样以上面的例子说明一下,以下是SQL数据库里某一个字段的信息:
500000部门编号
=
016
OR单据日期
>=
20090115
AND

现在需要:1、将“500000”赋给一个变量;
2、将“部门编号”赋给DBGrid组件的行[1]列[1]单元格;
3、将“=”号赋给DBGrid组件的行[1]列[2]单元格;
4、将“016”这个值赋给DBGrid组件的行[1]列[3]单元格;
5、将“OR”这个值转换成中文"或者",并赋给DBGrid组件的行[1]列[4]单元格;

6、将“单据日期”赋给DBGrid组件的行[2]列[1]单元格;
7、将“>=”号赋给DBGrid组件的行[2]列[2]单元格;
8、将“20090115 ”这个值赋给DBGrid组件的行[2]列[3]单元格;
9、将“AND”这个值转换成中文"并且",并赋给DBGrid组件的行[2]列[4]单元格;

注: 当后面有很多信息,以此类推!?

eqapple 2009-01-12
  • 打赏
  • 举报
回复
然后每一行作为一段处理即可.
eqapple 2009-01-12
  • 打赏
  • 举报
回复

{用StringReplace函数,直接把字符换成回车换行即可.}
function ReplaceStr(sourceStr: string): string;
var
resStr: string;
begin
resStr := StringReplace(sourceStr,Char(07),#13#10,[rfReplaceAll]);
resStr := StringReplace(resStr,Char(08),#13#10,[rfReplaceAll]);

Result := resStr;
end;
tjg5202 2009-01-12
  • 打赏
  • 举报
回复
这是某一个字段中存储的??好奇怪哎。。呵呵。。那个点应该是中文字符来着。。处理的时候
需要注意一下
yanele 2009-01-12
  • 打赏
  • 举报
回复
各位老师,有代码吗?我自学起来真的很难!
faith10099 2009-01-12
  • 打赏
  • 举报
回复
你这种情况,用游标处理最合适,
只要加上适当的判断(如AND编号)就可以了
bdmh 2009-01-12
  • 打赏
  • 举报
回复
可以先用TStringList把字段内容读到列表中,然后逐条去根据不同的字符截取你要的内容Pos
纯冰糖 2009-01-12
  • 打赏
  • 举报
回复
对,使用Pos获取特殊字符位置,再用copy复制出来。
yeinuse 2009-01-12
  • 打赏
  • 举报
回复
像你这种情况,其实像第二、第三行属于同一类型,即没有情况,还有剩下的就是有的情况
可以通过pos方法,判断关键字是否存在,然后归类,有的情况,可以通过copy方法,取出前后。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧