关于字符串的送分问题:)(50分)

  • 主题发起人 主题发起人 jmsczb
  • 开始时间 开始时间
J

jmsczb

Unregistered / Unconfirmed
GUEST, unregistred user!
有一某种格式的字符串,表示年,月,日,流水号及某一类别标志,要根据它的命名规则,生成相对应的字符串!

如字符串命名规则为:<yyyy><mm><dd><A...Z为26个任意的大写字母组成的字符串或其它符号,不会是小写的><一种标志如:IE,如果为IE那在产生的字符串中就变为 海运><nnnnn会自动增加的>

例子:
规则:<yyyy><mm><dd><CZB><IE><nnnnn>
则得到字符串:20010918CZB海运00001
怎么实现???????
又是我的工作,呵呵拜托,下午要呀!
用函数实现:
Function Jmsczb(s:string):string
begin
{看你的了,多谢}
end;

备注:标志有四种IE,IC,EL,EC,对应海运,海运出口,空运,空运出口,有可能是一个标志,也有可能是4个一起出来
时间格式也许是<yy><m><d>或其它的组合
 
各位老大,别因为分少就不来呀,小弟真的没什么分了,才来2天银子就花的差不多了:)
还请多多博爱呀^O^,将来发达一定不忘诸位兄弟!
 
不明白什么意思???
 
"<"和">"也是标志的一部分吗?
 
就是根据具体的规则,显示出相应的字符替代!
如<yyyy>就表示用四位年表示,明白了老大:)
请赐教!!!!
 
"<"和">不是,只是<>以内的
 
不明白.
请写一个实际转换例子.
.... to .....
 
比如格式为<yy><m><dd><string><nnnn><IE>
通过函数变为:
00918string0001海运


nnnn为流水号,可不必管它
 
没有说清楚,你说清楚些,我帮你完成这个函数!
输入什么格式?输出什么格式?CZB干什么的?nnnnn又有何用?
 
czb是一个字符串,不用关它,nnnn是个流水号,也不用理它,读出就可以了,
多谢这为大侠!
 
Function Jmsczb(s:string):string
var mstr,mtempstr,mriqi,mno:string; i:integer;
begin
result:='';
if trim(s)='' then exit;
mstr:=trim(s);
for i:=1 to length(mstr) do
if mstr in [0..9] then
mtempstr:=mtempstr+mstr
else begin
mstr:=copy(mstr,i+1,255);
break;
end;
//mtempstr 为时间
//如果时间格式为2001112 则无法分别应该为 2001-1-12 还是 2001-11-2 本函数取 2001-11-2
case length(mtempstr) of
8: mriqi:=mtempstr; //*****yyyymmdd
7: begin
if strtoint(copy(mtemstr,5,2))>12 then
mriqi:=copy(mtempstr,1,4)+'0'+copy(mtempstr,5,3) //yyyymdd
else mriqi:=copy(mtempstr,1,4)+copy(mtempstr,5,2)+'0'+copy(mtempstr,7,1); //yyyymmd
end; //*****yyyymdd or yyyymmd
6: begin
if (copy(mtempstr,1,2)<>'19') and (copy(mtempstr,1,2)<>'20') then begin //yymmdd
if strtoint(copy(mtempstr,1,2))<50 then
mriqi:='20'+copy(mtempstr,1,2)+copy(mtempstr,3,2)+'0'+copy(mtempstr,5,2) //yy<50 then yyyy=20yy
else mriqi:='19'+copy(mtempstr,1,2)+copy(mtempstr,3,2)+'0'+copy(mtempstr,5,2); //else yyyy=19yy
end else
mriqi:=copy(mtempstr,1,4)+'0'+copy(mtempstr,5,1)+'0'+copy(mtempstr,6,1); //yyyymd
end; //*****yyyymd or yymmdd
5: begin
if strtoint(copy(mtempstr,1,2))<50 then
mriqi:='20'+copy(mtempstr,1,2) //yy<50 then yyyy=20yy
else mriqi:='19'+copy(mtempstr,1,2); //else yyyy=19yy

if strtoint(copy(mtemstr,3,2))>12 then
mriqi:=mriqi+'0'+copy(mtempstr,3,3) //yymdd
else mriqi:=mrqi+copy(mtempstr,3,2)+'0'+copy(mtempstr,5,1); //yymmd
end; //*****yymmd or yymdd
4: begin
if strtoint(copy(mtempstr,1,2))<50 then
mriqi:='20'+copy(mtempstr,1,2) //yy<50 then yyyy=20yy
else mriqi:='19'+copy(mtempstr,1,2); //else yyyy=19yy
mriqi:=mrqi+'0'+copy(mtempstr,3,1)+'0'+copy(mtempstr,4,1);
end; //*****yymd
else mriqi='00000000';
end;
//日期取出完毕

//取出流水号
mtempstr:='';
for i:=length(mstr) downto 1 do
if mstr not in [0..9] then begin
mstr:=copy(mstr,1,i-1);
exit;
end else mtempstr:=mstr+mtempstr;
mno:=mtempstr;
//取出流水号完毕

//忽略大小写全部替换,可能会存在将不该替换的替换,进一步控制可以从后向前替换,在此略过。
mtempstr:=mstr;
StringReplace(mtempstr,'IE','海运',[rfReplaceAll,rfIgnoreCase]);
StringReplace(mtempstr,'','',[rfReplaceAll,rfIgnoreCase]); //如上略过
StringReplace(mtempstr,'','',[rfReplaceAll,rfIgnoreCase]);
StringReplace(mtempstr,'','',[rfReplaceAll,rfIgnoreCase]);
StringReplace(mtempstr,'','',[rfReplaceAll,rfIgnoreCase]);
result:=mriqi+mtempstr+mno;
end;

 
多人接受答案了。
 
后退
顶部