format.java
来自「一个简单的visio程序。」· Java 代码 · 共 2,266 行 · 第 1/5 页
JAVA
2,266 行
sbb.append('#');
count0 = tpp - sfp;
sbb.append(fm);
fm = sbb.toString();
}
}
else
{
m = subfm1.substring(0,sfp-tpp).indexOf('0');
if(m!=-1)
{
sb.append(subfm1.substring(0,m));
for(n=m; n<sfp-tpp; n++)
sb.append('0');
}
sb.append(tmp.substring(0,tpp));
}
int k = subfm1.length()-sfp - (tmp.length()-tpp);
if(k > 0)
{
sb.append(tmp.substring(tpp, tmp.length()));
sb.append(subfm1.substring((tmp.length()-tpp)+sfp, subfm1.length()));
}
else if(k == 0)
sb.append(tmp.substring(tpp, tmp.length()));
else
{
str = sb.toString();
str = str.concat(tmp.substring(tpp));
tpp = str.indexOf('.');
sb = new StringBuffer();
sb.append(tzRound(str,tpp+(subfm1.length()-sfp-1)));
}
}
else
{
tpp = tmp.length();
if(sfp - tpp <= 0)
{
if (!(new VString(tmp.substring(0,tpp)).dblValue() == 0 && subfm1.substring(sfp).indexOf('0') == -1 && !subfm1.equals("0.")))
sb.append(tmp.substring(0,tpp));
if(sfp-tpp < 0)
{
sbb = new StringBuffer();
for (n = 0; n < tpp-sfp; n++)
sbb.append('#');
count0 = tpp - sfp;
sbb.append(fm);
fm = sbb.toString();
}
}
else
{
m = subfm1.substring(0,sfp-tpp).indexOf('0');
if(m!=-1)
{
sb.append(subfm1.substring(0,m));
for(n=m; n<sfp-tpp; n++)
sb.append('0');
sb.append(tmp.substring(0,tpp));
}
else if (!(new VString(tmp.substring(0,tpp)).dblValue() == 0 && subfm1.substring(sfp).indexOf('0') == -1)) //MsgBox Format(0, "#0.00")
{
sb.append(subfm1.substring(0,sfp-tpp));
sb.append(tmp.substring(0,tpp));
}
}
sb.append(subfm1.substring(sfp,subfm1.length()));
}
}
else
{
sfp = subfm1.length();
int tpp = tmp.indexOf('.');
if(tpp == -1)
tpp = tmp.length();
if(sfp - tpp < 0)
sb.append(tzRound(tmp, tpp-1));
else
{
m = subfm1.substring(0,sfp-tpp).indexOf('0');
if(m!=-1)
{
sb.append(subfm1.substring(0,m));
for(n=m; n<sfp-tpp; n++)
sb.append('0');
sb.append(tzRound(tmp,tpp-1));//.substring(0,tpp),tpp-1));
}
else if(!(new VString(tmp.substring(0,tpp)).dblValue() == 0 && subfm1.substring(sfp-tpp).indexOf('0') == -1)) //MsgBox Format(0, "#,##0")
{
sb.append(subfm1.substring(0,sfp-tpp));
sb.append(tzRound(tmp,tpp-1));//.substring(0,tpp),tpp-1));
}
}
}
boolean god = false;
StringBuffer isFact = new StringBuffer();
if(sb.length() == 0) god = true;
else {
for (int iii = 0; iii<sb.length(); iii++)
isFact.append('F');
}
int lt = 0;
if(subfm1.length() != 0 && (sb.length() > subfm1.length()))
lt = sb.length() - subfm1.length();
for(n=0; n<fm.length(); n++)
{
c = fm.charAt(n);
if(c != '0' && c != '#' && c != '.')
{
if(god) {
sb.append(c);
isFact.append('T');
}
else {
sb.insert(n+lt-count0, c);
isFact.insert(n+lt-count0, 'T');
}
}
}
if(yes) {
int no = 0;
lt = 0;
if((sb.length()>fm.length()) && fm.length()!=0)
lt = sb.length() - fm.length();
for(i = 0; i<fmy.length(); i++)
{
char s = fmy.charAt(i);
char ch;
if(s == ',') no++;
if(s == '\\')
{
ch = fmy.charAt(i+1);
if (i>sb.length())
{
if (ch == '#') {
sb.append(']');
isFact.append('T');
}
else {
sb.append(ch);
isFact.append('T');
}
i++;
}
else {
if(ch == '#') {
sb.insert(i-no+lt,']');
isFact.insert(i-no+lt, 'T');
}
else {
sb.insert(i-no+lt, fmy.charAt(i+1));
isFact.insert(i-no+lt, 'T');
}
no++;
i++;
}
}
}
}
str = sb.toString();
if((cpp != -1 || isComma) && str.length()!=0)
str = comma(str, isFact);
sb = new StringBuffer();
for(n = 0; n < str.length(); n++)
{
c = str.charAt(n);
if (c != '#')
{
if(c == ']')
sb.append('#');
else
sb.append(c);
}
else if(str.indexOf('.') != -1 && (n+1) <= str.length()-1 && (n+1) > str.indexOf('.') && str.charAt(n+1) == '0')
sb.append('0');
}
str2 = sb.toString();
if(str2.length()!=0 && str2.charAt(0) == ',')
str2 = str2.substring(1);
}
if(tflag == true)
{
m = str2.indexOf('.');
if(isNumOrDate(new VString(str2)))
{
if(new VString(str2).dblValue() == 0)
return new VString(str2.substring(m));
else if(new VString(str2.substring(0,m)).dblValue()==0)
{
if(c100 == '-')
return new VString(new String("-").concat(str2.substring(m)));
else
return new VString(str2.substring(m));
}
else return new VString(str2);
}
else return new VString(str2);
}
if (c100 == '-')
return new VString("-"+str1.concat(str2));
sb = new StringBuffer();
fmmm = str1.concat(str2); //format(False, "##0,,,##")
if (isFalse) {
for(i = 0; i < fmmm.length(); i++)
if(fmmm.charAt(i) != '#' && fmmm.charAt(i) != ',')
sb.append(fmmm.charAt(i));
return new VString(sb.toString());
}
return new VString(str1.concat(str2));
}
else return exp;
}
/*** user-defined date/time formats ***/
else if (is_datformat(c,fm))
{
if(fm.indexOf('[') != -1)
throw new HpException(5, "Invalid procedure call");
fm = fmy;
tmp = boolToStr(tmp);
if(!isNumOrDate(new VString(tmp)))
{
if (fm.indexOf('e') != -1 || fm.indexOf('E') != -1
|| (fm.indexOf('t') != -1 && !fm.substring(fm.indexOf('t')).toLowerCase().startsWith("ttttt"))
|| (fm.indexOf('T') != -1 && !fm.substring(fm.indexOf('T')).toUpperCase().startsWith("TTTTT")))
throw new HpException(5, "Invalid procedure call");
return exp;
}
int l = fm.length();
outer: for (; n < l;)
{
for (m = l; m > n; )
{
str = fm.substring(n,m);
inter: for (i = 0; i < 30; i++)
{
if (dfn[i].equalsIgnoreCase(str))
{
if(str.charAt(0)=='a' || str.charAt(0)=='A')
{
if(dfn[i].charAt(0)==str.charAt(0))
sb.append(def_dat(new VString(tmp), dfn[i]));
else
continue inter;
}
else
{
if (dfn[i].equalsIgnoreCase("hh") || dfn[i].equalsIgnoreCase("h"))
{
for (int mu = n+str.length(); mu < l;)
{
c = fm.charAt(mu);
if (!is_datformat(c,fm.substring(mu))) mu++;
else if(c=='m' || c == 'M')
{
if(mu+1==l)
{
fm=fm.substring(0,mu).concat("n");
mu++;
}
else
{
fm=fm.substring(0,mu).concat("n")
.concat(fm.substring(mu+1));
if(fm.charAt(mu+1)=='m' || fm.charAt(mu+1)=='M')
{
if(mu+2==l)
{
fm=fm.substring(0,mu+1).concat("n");
mu=l;
}
else
{
fm=fm.substring(0,mu+1).concat("n")
.concat(fm.substring(mu+2));
mu=l;
}
}
else mu=l;
}
}
else mu=l;
}
if ((fm.toLowerCase().indexOf("am/pm") != -1
|| fm.toLowerCase().indexOf("ampm") != -1
|| fm.toLowerCase().indexOf("a/p") != -1)
//&& new VString(def_dat(new VString(tmp),dfn[i])).intValue()>12
&& (int)strToDbl(def_dat(new VString(tmp), dfn[i])) > 12)
{
int fei = new VString(def_dat(new VString(tmp),dfn[i])).intValue()-12;
if(dfn[i]=="hh")
sb.append(fei<10?("0"+fei):(""+fei));
if(dfn[i]=="h")
sb.append(""+fei);
}
else if ((fm.toLowerCase().indexOf("am/pm") != -1
|| fm.toLowerCase().indexOf("ampm") != -1
|| fm.toLowerCase().indexOf("a/p") != -1)
//&& new VString(def_dat(new VString(tmp),dfn[i])).intValue()==0
&& (int)strToDbl(def_dat(new VString(tmp), dfn[i])) == 0
&& fm.substring(n+str.length()).toLowerCase().indexOf('h') == -1)
{
sb.append(""+12);
}
else sb.append(def_dat(new VString(tmp),dfn[i]));
}
else
sb.append(def_dat(new VString(tmp),dfn[i]));
}
n = n + str.length();
continue outer;
}
}
m--;
if (m == n)
{
if (fm.charAt(n) == 'e' || fm.charAt(n) == 't' || fm.charAt(n) == 'E' || fm.charAt(n) == 'T')
throw new HpException(5, "Invalid procedure call");
else if(fm.charAt(n) == '\\')
{
if (n+1 <= fm.length()-1) {
sb.append(fm.charAt(n+1));
n++;
}
}
else sb.append(fm.charAt(n));
}
}
n ++;
}
str2 = sb.toString();
return new VString(str1.concat(str2));
}
/*** a format expression for strings ***/
else if (is_strformat(c))
{
int j,p;
StringBuffer sbb = new StringBuffer();
String tmp11 = tmp10;
if (isEmpty) return new VString("");
if(fm.indexOf('<')!=-1)
tmp10 = tmp10.toLowerCase();
else if(fm.indexOf('>')!=-1)
tmp10 = tmp10.toUpperCase();
if(fm.indexOf('@')==-1 && fm.indexOf('&')==-1)
str2 = tmp10;
else
{
for(i=0; i<fm.length(); i++)
{
c = fm.charAt(i);
if(c == '@' || c == '&')
sbb.append(c);
}
p = sbb.toString().length()-tmp10.length();
if(fm.indexOf('!')!=-1)
{
for(i=0,j=0; i<fm.length(); )
{
c = fm.charAt(i);
if(c == '<' || c == '>' || c == '!')
i++;
else if(c == '@' || c == '&')
{
if(j==tmp10.length())
{
if(c=='@')
{
sb.append(" ");
i++;
}
else i++;
}
else
{
sb.append(tmp10.charAt(j));
j++;
i++;
}
}
else
{
sb.append(fm.charAt(i));
i++;
}
}
if(p<0)
sb.append(tmp10.substring(tmp10.length()-Math.abs(p)));
str2 = sb.toString();
}
else
{
fm = fmmm;
if(p<0)
{
str = tmp10.substring(0,Math.abs(p));
tmp10 = tmp10.substring(Math.abs(p));
for(i=0,j=0; i<fm.length(); )
{
c = fm.charAt(i);
if(c == '<' || c == '>' || c == '!')
i++;
else if(c == '@' || c == '&')
{
if(j==tmp10.length())
{
if(c=='@')
{
sb.append(" ");
i++;
}
else i++;
}
else
{
sb.append(tmp10.charAt(j));
j++;
i++;
}
}
else
{
sb.append(fm.charAt(i));
i++;
}
}
sb.insert(0,str);
str2 = sb.toString();
}
else{
for(i=fm.length()-1,j=tmp10.length()-1; i>=0; )
{
c = fm.charAt(i);
if(c == '<' || c == '>' || c == '!')
i--;
else if(c == '@' || c == '&')
{
if(j<0)
{
if(c=='@')
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?