核心目标是实现 字符串竖向排版(支持多种参数设置),并包含两个关键功能:
ReverseString函数:实现字符串反转。VerticalString函数:将字符串以竖排形式排版,支持从左到右或从右到左的方向,支持设置每列字数,以及支持精确字符分割(考虑到汉字等双字节字符)。
chars=
(
赵客缦胡缨,吴钩霜雪明。
银鞍照白马,飒沓如流星。
十步杀一人,千里不留行。
事了拂衣去,深藏身与名。
闲过信陵饮,脱剑膝前横。
将炙啖朱亥,持觞劝侯嬴。
三杯吐然诺,五岳倒为轻。
眼花耳热后,意气素霓生。
救赵挥金槌,邯郸先震惊。
)
MsgBox % VerticalString(chars,1,"",1)
;;字符串反转
ReverseString(ByRef String) {
String .= "", DllCall("msvcrt.dll\_wcsrev", "Ptr", &String, "CDecl")
return String
}
MsgBox % ReverseString("十步杀一人,千里不留行。")
/*
Right:1—竖排从右始排版0—竖排从左始排版
Rows:每列字数
U:精确分割字符串,很多双字节汉字用StrSplit分割不行 U参为1时用正则精准分割
*/
;;字符串竖向排版
VerticalString(ByRef String,Right=0,delimiter:="",U=0,Rows=12){
index:=1, result:="",tarr:=[]
If (!String)
return []
String:=RegExReplace(String,"(*BSR_ANYCRLF)\R|\t")
if U {
While index:=RegExMatch(String, "O).", match, index){
if match.Value
tarr.push(match.Value), index+=match.Len
}
}
tarr:=StrSplit(String),Col:=Ceil(objCount(tarr)/Rows)
Loop, % Rows
{
Index:=A_Index
Loop, % Col
{
result.=tarr[(Right?Col-A_Index:A_Index-1)*Rows+Index]?tarr[(Right?Col-A_Index:A_Index-1)*Rows+Index] delimiter:A_Space A_Space A_Space delimiter
}
result:=Trim(result,delimiter) "`r`n"
}
String:=result,result:=""
Clipboard:=String
Return String
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)