- 论坛徽章:
- 0
|
脚本如下:(取大写、小写字符串长度时速度很慢,请帮我优化一下,谢谢)
注:脚本中的xx2dx为一C程序,用于将小写数字转换成大写格式。
##################信用社特种转帐贷方传票录入##################
if [ $# -ne 1 ]
then
clear
echo ""
echo "语法错误!!!\n"
echo "格式:cplr 日期\n"
echo "例如 cplr 20040622\n"
exit
fi
if [ ! -f dfcp.$1 jine.$1 ]
then
touch dfcp.$1
touch jine.$1
fi
YY=`echo $1 | cut -b 1-4`
MM=`echo $1 | cut -b 5-6`
DD=`echo $1 | cut -b 7-8`
brh="99999"
chr="_"
fuhao="¥"
CHOICE=3
while true
do
clear
echo ""
echo ""
echo "\t 济宁市农村信用社特种转帐贷方传票 "
echo "\t ----------------"
echo "\t $YY年$MM月$DD日"
echo "\t━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "\t\t 1) 传票录入"
echo "\t\t 2) 已录入传票统计核对"
echo "\t\t 3) 查看已录入传票"
echo "\t\t 4) 传票打印"
echo "\t\t 5) 传票初始化"
echo "\t\t 6) 联社代码查询"
echo "\t\t 0) 退出"
echo
echo "\t━━━━━━━━━━━━━━━━━━━━━━━"
echo "\t\t\t请选择(0-3):\c"
read CHOICE
case ${CHOICE}
in
0)
clear
exit
;;
1)
while true
do
echo ""
echo "\t\t请输入联社代码:\c"
read brh
while [ -z "$brh" ]
do
echo "\t\t请输入联社代码:\c"
read brh
done
if [ $brh != "908[0-9][0-9]" ]
then
echo ""
echo "\t\t联社代码错误,请重新输入...\c"
echo ""
read tmp
break
fi
brh1="$brh"
echo "\t\t请输入金额:\c"
read jine
if [ $jine = "0.00" ]
then
echo ""
echo "\t\t 金额为零,请重新输入...\c"
read tmp
break
fi
if [ $jine = "0" ]
then
echo ""
echo "\t\t 金额为零,请重新输入...\c"
read tmp
break
else
echo $jine >>jine.$1
fi
##########取大写字符串长度###########
dxjine=`xx2dx $jine `
cou=`echo $dxjine | wc -c`
while [ $cou -lt 48 ]
do
dxjine="$dxjine$chr"
cou=`expr $cou + 1`
done
##########取小写字符串长度###########
jine="$fuhao$jine"
cou=`echo $jine | wc -c`
while [ $cou -lt 13 ]
do
jine="$chr$jine"
cou=`expr $cou + 1`
done
if [ $brh = "90801" ]
then brh="城区信用社"
actno="23520000108"
fi
if [ $brh = "90802" ]
then brh="任城__联社"
actno="23520000221"
fi
if [ $brh = "90803" ]
then brh="兖州__联社"
actno="23520000334"
fi
if [ $brh = "90804" ]
then brh="曲阜__联社"
actno="23520000447"
fi
if [ $brh = "90805" ]
then brh="泗水__联社"
actno="23520000560"
fi
if [ $brh = "90806" ]
then brh="邹城__联社"
actno="23520000673"
fi
if [ $brh = "90807" ]
then brh="微山__联社"
actno="23520000786"
fi
if [ $brh = "90808" ]
then brh="鱼台__联社"
actno="23520000802"
fi
if [ $brh = "90809" ]
then brh="金乡__联社"
actno="23520000915"
fi
if [ $brh = "90810" ]
then brh="嘉祥__联社"
actno="23520001028"
fi
if [ $brh = "90811" ]
then brh="汶上__联社"
actno="23520001141"
fi
if [ $brh = "90812" ]
then brh="梁山__联社"
actno="23520001254"
fi
echo "" >>dfcp.$1
echo "\t 信用合作社特种转帐贷方传票 " >>dfcp.$1
echo "\t==============================================" >>dfcp.$1
echo "\t $YY年$MM月$DD日" >>dfcp.$1
echo "┏━┳━━━┳━━━━━━━━━━━━━━┳━┳━━━┳━━━━━━━━┓" >>dfcp.$1
echo "┃付┃全 称┃济宁市农村信用社资金清算中心┃收┃全 称┃ $brh ┃" >>dfcp.$1
echo "┃款┣━━━╋━━━━━━━━━━━━━━┫款┣━━━╋━━━━━━━━┫" >>dfcp.$1
echo "┃ ┃帐 号┃ ┃ ┃帐 号┃ $actno ┃" >>dfcp.$1
echo "┃单┣━━━╋━━━━━┳━━┳━━━━━┫单┣━━━╋━━┳━━┳━━┫" >>dfcp.$1
echo "┃位┃开户行┃ ┃行号┃ ┃位┃开户行┃ ┃行号┃ ┃附" >>dfcp.$1
echo "┣━┻┳━━┻━━━━━┻━━┻━━━━━┻━┻━━━┻━━┻━━┻━━┫件" >>dfcp.$1
echo "┃金额┃大写 dxjine$jine┃" >>dfcp.$1
echo "┣━━┻━━━┳━━━━━┳━━━┳━━━━┳━━━━━━━━━━━━━┫" >>dfcp.$1
echo "┃原始凭证金额┃ ┃赔偿金┃ ┃ 科目(贷) ┃" >>dfcp.$1
echo "┣━━━━━━╋━━━━━╋━━━╋━━━━┫ ┃" >>dfcp.$1
echo "┃原始凭证名称┃ ┃号 码┃ ┃ 对方科目(借) ┃张" >>dfcp.$1
echo "┣━━━━━━╋━━━━━┻━━━┻━━━━┫ ┃" >>dfcp.$1
echo "┃ 转帐原因 ┃ 直连商户资金清算(银行盖章) ┃ 复核 记帐 制票 ┃" >>dfcp.$1
echo "┗━━━━━━┻━━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛" >>dfcp.$1
echo "" >>dfcp.$1
echo "---------------------------------------------------------------------------" >>dfcp.$1
echo "" >>dfcp.$1
done
;;
2)
hj=`awk 'BEGIN{aa=0.00}{aa=aa+$1}END{printf ("%.2f",aa)}' jine.$1`
echo ""
echo "\t\t\t合计 hj"
echo ""
echo "\t\t 传票统计完毕,按回车继续...\c"
read tmp
;;
3)
if [ -s "dfcp.$1" ]
then
sed "s/_/ /g" dfcp.$1 >dfcp.tmp
mv dfcp.tmp dfcp.$1
cat dfcp.$1 |pg
else
echo ""
echo "\t\t 无传票录入记录,按回车继续...\c"
read tmp
fi
;;
4)
sed "s/_/ /g;s///g" dfcp.$1 >dfcp.tmp
awk 'BEGIN{ line=65;i=0 }
{ if ( i == 65 )
{ printf ("\n" ;
i=0 }
else
{ i=i+1;
print $0 }
}' dfcp.tmp >dfcp.$1
echo "\033[5i"
cat dfcp.$1
echo "\033[4i"
echo ""
echo "\t\t 传票打印完毕,按回车继续...\c"
read tmp
rm dfcp.tmp
;;
5)
>dfcp.$1
>jine.$1
if [ -f dfcp.tmp ]
then
rm dfcp.tmp
fi
echo ""
echo "\t\t 传票初始化完毕,按回车继续...\c"
read tmp
;;
6)
echo ""
echo "\t━━━━━━━━━━━━━━━━━━━━━━━"
echo "\t\t 城区信用社 90801"
echo "\t\t 任城 联社 90802"
echo "\t\t 兖州 联社 90803"
echo "\t\t 曲阜 联社 90804"
echo "\t\t 泗水 联社 90805"
echo "\t\t 邹城 联社 90806"
echo "\t\t 微山 联社 90807"
echo "\t\t 鱼台 联社 90808"
echo "\t\t 金乡 联社 90809"
echo "\t\t 嘉祥 联社 90810"
echo "\t\t 汶上 联社 90811"
echo "\t\t 梁山 联社 90812"
echo "\t━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "\t\t 查询完毕,按回车继续...\c"
read tmp
;;
esac
done
xx2dx原码如下:/*******************小写转换大写金额程序****************/
#include <stdio.h>
#define TEN "拾"
#define HND "佰"
#define THU "仟"
#define TTH "万"
#define HMI "亿"
#define FILL(A) if(!zflag) strcat(sResult, A); break
#define FILLW(A) if(!zflag) { tthflag = 1; strcat(sResult, A); } break
#define FILLY(A) if(!zflag) { hmiflag = 1; strcat(sResult, A); } break
void main(int argc, char **argv)
{
if(argc < 2)
{
printf("Usage: %s amt\n", argv[0]);
exit(0);
}
PrintBigMoney(argv[1]);
exit(0);
}
int PrintBigMoney(char *source)
{
char sResult[300], intpart[30], decpart[20], *pstr;
char *BigNum[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
int i, intlen, p_int = 0, zheadflag = 1, zflag = 0;
int tthflag = 0, hmiflag = 0;
memset(sResult, '\0', sizeof(sResult));
strcpy(intpart, source);
if (intpart[p_int] == '-')
{
strcat(sResult, "负" ;
p_int++;
}
pstr = (char *)strstr(intpart + p_int, "." ;
if (pstr != NULL)
{
pstr[0] = '\0';
strcpy(decpart, pstr + 1);
}
intlen = strlen(intpart);
for(i = 0; i < intlen; i++)
{
if(intpart < '0' || intpart > '9')
{
printf("part of int is not valid\n" ;
exit(0);
}
}
for(i = 0; i < strlen(decpart); i++)
{
if(decpart < '0' || decpart > '9')
{
printf("part of dec is not valid\n" ;
exit(0);
}
}
if(intlen > 12)
printf("Warning: number is too large to translate, result is possibly not accuracy!\n" ;
if(atol(intpart) == 0)
strcat(sResult, BigNum[0]);
for (i = p_int; i < intlen; i++)
{
if (intpart == '0')
{
if(zheadflag)
continue;
else
zflag = 1;
}
else
{
zheadflag = 0;
if(zflag)
{
strcat(sResult, BigNum[0]);
zflag = 0;
}
strcat(sResult, BigNum[intpart - '0']);
}
switch(intlen - i)
{
case 2:
FILL(TEN);
case 6:
FILLW(TEN);
case 10:
FILLY(TEN);
case 14:
FILLW(TEN);
case 18:
FILLY(TEN);
case 3:
FILL(HND);
case 7:
FILLW(HND);
case 11:
FILLY(HND);
case 15:
FILLW(HND);
case 19:
FILLY(HND);
case 4:
FILL(THU);
case 8:
FILLW(THU);
case 12:
FILLY(THU);
case 16:
FILLW(THU);
case 20:
FILLY(THU);
case 5:
case 13:
if(!zflag)
strcat(sResult, TTH);
else
{
if(tthflag)
strcat(sResult, TTH);
}
break;
case 9:
tthflag = 0;
case 17:
strcat(sResult, HMI);
break;
}
}
strcat(sResult, "元" ;
if ((strlen(decpart) != 0) && (atol(decpart) != 0))
{
for (i = 0; i < strlen(decpart); i++)
{
if (decpart >= '0' && decpart <= '9')
strcat(sResult, BigNum[decpart - '0']);
if (i == 0)
strcat(sResult, "角" ;
if (i == 1)
strcat(sResult, "分" ;
}
}
else
strcat(sResult, "整" ;
printf("%s\n", sResult);
} |
|