自动编号(100分)

  • 主题发起人 主题发起人 wangzequn
  • 开始时间 开始时间
W

wangzequn

Unregistered / Unconfirmed
GUEST, unregistred user!
请各位大侠帮忙:我想用字母做自动编号如:AA,AB...AZ,BA,BB..BZ当编到ZZ的时候自动变AAA,该如何处理
 
其实这些编号和数字编号没什么分别,只不过这些编号是26进制,而且显示的是A-Z。它们和普通的数字编号可以找到对应的关系。

比如
0-25表示A-Z
26-51表示AA-AZ
52-77表示BA-BZ
如些类推。

关键的问题是你要在程序中成现转换, 还是在数据库管理系统中实现转换。
还有怎么处理删除后空号的处理,能不能夸号分配号之类的问题。还是要像SQL SERVER的标识一样。
你再说清楚一点你的要求吧。
 
A=65,
你可以使用编码,把进制变成了二十二进制的自动加一。
给你个编码->整数的,返回的,就是编码你看看C语言的第一页就讲进制换算方法。你自己写函数了。function IntToAAA(int:integer):string;
我也忘了,给你一个例子,供参考了。

function AAAToInt(AAA:String):Integer;
var
i:integer;
begin
Result:=0;
for i:=1 to Length(AAA) do
Result:=Result+(Ord(AAA)-65)*(Length(AAA)-i);
end;
 
的自己写函数
 
一、先 var i:integer;
case i.... do
1:A
2:B
3:C
........
26:Z
二、i:=i+1;
//AA。。。。AZ:
A+i;//A1=AA,A2=AB............
B+i;//B1=BA,B2=BB.........
。。。。。。。。。。。。。
自已可以想了吧?
 
多位的规则可能会不同,这是按照你的规则书写的代码:
function TForm1.ReturnStr(Source:String):String;
begin
if ord(Source[2])<ord('Z') then
Result:=Copy(Source,1,1)+Chr(ord(Source[2])+1)
else if ord(Source[2])=ord('Z') then begin
if ord(Source[1])<ord('Z') then
Result:=Chr(ord(Source[1])+1)+'A'
else
Result:='AAA';
end;
end;
 
给两个PHP函数,36的,
function enc36($int){
//36 1296 46656 1679616 60466176
//36 1296 46656 1679616 60466176
$a36=explode(",","a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9");
$s="";
$int+=0;
if ($int>=1679616){ $i=intval($int / 1679616); $s.=$a36[$i]; $int=$int % 1679616; }
if ($int>=46656){ $i=intval($int / 46656); $s.=$a36[$i]; $int=$int % 46656;}
else if ($s!="") $s.="a";
if ($int >= 1296){ $i=intval($int / 1296); $s.=$a36[$i]; $int=$int % 1296;}
else if ($s!="") $s.="a";
if ($int >= 36){ $i=intval($int / 36); $s.=$a36[$i]; $int=$int % 36; }
else if ($s!="") $s.="a";
$s.=$a36[$int];
return $s;
}
function dec36($s){
$a36=explode(",","a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9");
$s=strtolower($s);
$len=strlen($s); $int=0;
if ($len>0) $int=array_search($s[$len-1], $a36); $len--;
if ($len>0) $int+=36*array_search($s[$len-1], $a36); $len--;
if ($len>0) $int+=1296*array_search($s[$len-1], $a36); $len--;
if ($len>0) $int+=46656*array_search($s[$len-1], $a36); $len--;
if ($len>0) $int+=1679616*array_search($s[$len-1], $a36); $len--;
return $int;
}
 
顶.....................
 
我自已写的函数,试了一下基本可以
KK是Str的长度
function AA(var str: String; kk: Integer): String;
begin
if str[kk]='Z' then
begin
str[kk]:='A';
if KK=1 then str:='A'+str;
AA(str, kk-1);
end
else
begin
str[kk]:=Chr(ord(Str[KK])+1);
end;
Result:=Str;
end;
 
本来这分该给自已的:)
 
后退
顶部