核心目标是实现 字符串竖向排版(支持多种参数设置),并包含两个关键功能:
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)