找回密码
 加入
搜索
查看: 2373|回复: 6

[AU3基础] 字符串补足长度的函数?[已解决]

  [复制链接]
发表于 2016-12-4 23:36:36 | 显示全部楼层 |阅读模式
本帖最后由 cashiba 于 2017-3-18 09:32 编辑

如下,有时需要将数字或字符串对齐数位,也就是在字符串前或后增加若干个某字符(比喻0或某符号)。
虽然能达到目的,但是总感觉有点不精炼,不地道
另外,consolewrite出来的也不整齐。
求修改....
#include <Date.au3>
#include <MsgBoxConstants.au3>

consolewrite(FillBit("现在时间是",18,"-",9) & _NowTime() & @CRLF)
consolewrite(FillBit("当前日期为",18,"-",9) & _NowDate() & @CRLF)
consolewrite(FillBit("今天的日期/时间",18,"-",9) & _Now() & @CRLF)
consolewrite(FillBit("今天的日期/时间",18,"-",9) & _Nowcalc() & @CRLF)
consolewrite(FillBit("今天的日期/时间",18,"-",9) & _NowCalcDate() & @CRLF)

Local $sNewDate = _DateAdd('d', 5, _NowCalcDate())
consolewrite(FillBit("今天 + 5 天",18,"-",9) & $sNewDate & @CRLF)
$sNewDate = _DateAdd('w', -2, _NowCalcDate())
consolewrite(FillBit("今天日期 - 2 星期",18,"-",9) & $sNewDate & @CRLF)
$sNewDate = _DateAdd('n', 15, _NowCalc())
consolewrite(FillBit("当前时间 + 15 分钟",18,"-",9) & $sNewDate & @CRLF)
$sNewDate = _DateAdd('s', 1087497645, "1970/01/01 00:00:00")
consolewrite(FillBit("+1087497645秒后日期",18,"-",9) & $sNewDate & @CRLF)

func FillBit($strr,$long,$sig,$site)
         ConsoleWrite(@CRLF & @CRLF & StringLen($strr) & @CRLF);本行只是为看看字符串长度,可无情删除。
         if StringLen($strr)>=$long or $strr="" then
                return $strr
                Exit
         EndIf

     if StringLen($strr)<$long Then
                if $site="0" Then
                   for $i=1 to ($long-StringLen($strr))
                           $Strr= $sig & $Strr
                   Next
                ElseIf $site="9" Then
                   for $i=1 to $long-(StringLen($strr))
                           $Strr= $Strr & $sig
                   Next
                Else
                   $Strr= $Strr
                EndIf
         EndIf
     return $strr
EndFunc
感觉AU3的UDF库里应该有这类函数...
StringFormat好像可以做这个事情,但是,好复杂,看不懂。。。。怎么用?....
发表于 2016-12-7 12:07:21 | 显示全部楼层
不知有没看懂楼主要表达的意思:
个人认为在字符串长度相差不大的情况下直接 $str1 &  @TAB & $str2
如果相差很大的话即使对齐了也看不习惯...
发表于 2016-12-7 13:13:14 | 显示全部楼层
中文不好算长度,所以有时会比较蛋疼
#include <Date.au3>

consolewrite(StringFormat("%-14s%s\n",'现在时间是:', _NowTime()))
consolewrite(StringFormat("%-14s%s\n",'当前日期为:', _NowDate()))
consolewrite(StringFormat("%-12s%s\n",'今天的日期/时间:', _Now()))
consolewrite(StringFormat("%-12s%s\n",'今天的日期/时间:', _Nowcalc()))
consolewrite(StringFormat("%-12s%s\n",'今天的日期/时间:', _NowCalcDate()))
consolewrite(StringFormat("%-17s%s\n",'今天 + 5 天',_DateAdd('d', 5, _NowCalcDate())))
consolewrite(StringFormat("%-14s%s\n",'今天日期 - 2 星期',_DateAdd('w', -2, _NowCalcDate())))
consolewrite(StringFormat("%-14s%s\n",'当前时间 + 15 分钟',_DateAdd('n', 15, _NowCalc())))
consolewrite(StringFormat("%-16s%s\n",'+1087497645秒后日期',_DateAdd('s', 1087497645, "1970/01/01 00:00:00")))


ConsoleWrite(@CRLF)

consolewrite(StringFormat("%s%16s\n",'现在时间是:', _NowTime()))
consolewrite(StringFormat("%s%17s\n",'当前日期为:', _NowDate()))
consolewrite(StringFormat("%s%21s\n",'今天的日期/时间:', _Now()))
consolewrite(StringFormat("%s%22s\n",'今天的日期/时间:', _Nowcalc()))
consolewrite(StringFormat("%s%13s\n",'今天的日期/时间:', _NowCalcDate()))
consolewrite(StringFormat("%s%19s\n",'今天 + 5 天',_DateAdd('d', 5, _NowCalcDate())))
consolewrite(StringFormat("%s%13s\n",'今天日期 - 2 星期',_DateAdd('w', -2, _NowCalcDate())))
consolewrite(StringFormat("%s%21s\n",'当前时间 + 15 分钟',_DateAdd('n', 15, _NowCalc())))
consolewrite(StringFormat("%s%20s\n",'+1087497645秒后日期',_DateAdd('s', 1087497645, "1970/01/01 00:00:00")))
 楼主| 发表于 2016-12-7 20:54:36 | 显示全部楼层
Huiseyu 发表于 2016-12-7 12:07

主要是补齐数位阿,比喻最简单的
1
2
...
11
12
...
111
222
.....
有时可能要变成
001
002
...
011
012
...
111
222
.....
这样子。就需要补齐数位
输出字符串或排版时能有这种要求....
 楼主| 发表于 2016-12-7 20:59:01 | 显示全部楼层
本帖最后由 cashiba 于 2016-12-7 21:01 编辑
中文不好算长度,所以有时会比较蛋疼
ceoguang 发表于 2016-12-7 13:13

感谢CEO超版....
不会用StringFormat函数...
StringFormat( "格式控制", 变量1[, ... 变量32])
"格式控制": 
%[flags] [width] [.precision] type 
%[标志 ] [宽度  ] [.精度     ] 类型 )
类似C语言的printf()和sprintf()函数
发表于 2016-12-10 21:37:05 | 显示全部楼层
回复 5# cashiba


    不会用,有个超级直观的方法,就是字符串截取

00000000000000000000001

在前面多加几个0,你保持成几位就截取成几位不就OK。

直观 傻瓜 简单 粗爆
 楼主| 发表于 2016-12-11 09:31:47 | 显示全部楼层
回复  cashiba
不会用,有个超级直观的方法,就是字符串截取
00000000000000000000001
在前 ...
绿色风 发表于 2016-12-10 21:37

现在想到的也就是缺位补0.....这个类似C语言的printf()和sprintf()函数不太好懂,估计懂了用起来也简单
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-25 09:35 , Processed in 0.081634 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表