无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6069|回复: 18
打印 上一主题 下一主题

批处理系列7:计算字符串长度

[复制链接]
跳转到指定楼层
1#
发表于 2021-7-18 14:51:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 青青草 于 2021-7-18 15:03 编辑
  1. :Length
  2. setlocal enabledelayedexpansion
  3. set "$=!%1!#"
  4. set "len="&for %%a in (4096 2048 1024 256 128 64 32 16 8 4 2 1) do (if "!$:~%%a,1!" NEQ "" set/a len+=%%a&set "$=!$:~%%a!" &if "!$:~1!"=="" goto ok)
  5. set "s=!s!fedcba9876543210" &set/a "len+=0x!s:~16,1!"
  6. :ok
  7. endlocal&set/a "%2=%len%"&goto:eof
  8. pause
复制代码
调用
  1. call :Length %1 %2
  2. rem 第一个参数为字符串,第二个参数为字符串长度。
复制代码



2#
发表于 2021-7-18 16:27:31 | 只看该作者
ok
回复

使用道具 举报

3#
发表于 2021-7-18 20:36:48 | 只看该作者
不会用也不会玩

点评

多学习,慢慢就会了。  详情 回复 发表于 2021-7-18 21:40
回复

使用道具 举报

4#
 楼主| 发表于 2021-7-18 21:40:13 | 只看该作者
dx163 发表于 2021-7-18 20:36
不会用也不会玩

多学习,慢慢就会了。
回复

使用道具 举报

5#
发表于 2021-7-19 08:42:36 | 只看该作者
华罗庚二分法。
回复

使用道具 举报

6#
 楼主| 发表于 2021-7-19 10:21:51 | 只看该作者
回复

使用道具 举报

7#
 楼主| 发表于 2021-7-19 10:22:19 | 只看该作者
回复

使用道具 举报

8#
发表于 2021-7-19 10:46:06 | 只看该作者
感谢分享
回复

使用道具 举报

9#
 楼主| 发表于 2021-7-19 11:04:12 | 只看该作者
回复

使用道具 举报

10#
发表于 2021-7-19 15:46:42 来自手机 | 只看该作者
不妨研究下汉字、标点、全角字符等长度为2才能和英文对齐的计算方法。

点评

你的意思是?  详情 回复 发表于 2021-7-19 19:12
回复

使用道具 举报

11#
 楼主| 发表于 2021-7-19 19:12:53 | 只看该作者
nttwqz 发表于 2021-7-19 15:46
不妨研究下汉字、标点、全角字符等长度为2才能和英文对齐的计算方法。

你的意思是?

点评

比如下面两行,按一般长度计算方法,长度均为6 你的意思是? abcde? 但是cmd的默认字体a无法对齐,即使第一列都是6。 你的意思是? a abcde? a 简言之,中文字符宽和英文字符宽不相同,安装相同的方法判断  详情 回复 发表于 2021-7-19 21:48
中文简体环境下的 cmd 把一个汉字 识别为一个字符,而实际上占用两个字符的显示位置。  详情 回复 发表于 2021-7-19 21:44
回复

使用道具 举报

12#
发表于 2021-7-19 21:44:30 | 只看该作者

中文简体环境下的  cmd 把一个汉字 识别为一个字符,而实际上占用两个字符的显示位置。
回复

使用道具 举报

13#
发表于 2021-7-19 21:48:19 来自手机 | 只看该作者
青青草 发表于 2021-7-19 19:12
你的意思是?

比如下面两行,按一般长度计算方法,长度均为6
你的意思是?
abcde?

但是cmd的默认字体a无法对齐,即使第一列都是6。
你的意思是? a
abcde? a

简言之,中文字符宽和英文字符宽不相同,安装相同的方法判断,虽然长度相同,但是无法用于对齐

点评

中英文混编,批处理很难搞。  详情 回复 发表于 2021-7-20 18:12
夹杂 中/英文 批处理不好搞, 写程序会简便些, 将文字 /靠左/靠中/靠右 对齐.  详情 回复 发表于 2021-7-20 07:24
回复

使用道具 举报

14#
发表于 2021-7-20 07:24:50 | 只看该作者
nttwqz 发表于 2021-7-19 21:48
比如下面两行,按一般长度计算方法,长度均为6
你的意思是?
abcde?

夹杂 中/英文 批处理不好搞,
写程序会简便些,
将文字 /靠左/靠中/靠右 对齐.
回复

使用道具 举报

15#
 楼主| 发表于 2021-7-20 18:12:45 | 只看该作者
nttwqz 发表于 2021-7-19 21:48
比如下面两行,按一般长度计算方法,长度均为6
你的意思是?
abcde?

中英文混编,批处理很难搞。
回复

使用道具 举报

16#
发表于 2021-7-24 15:22:34 | 只看该作者

感谢分享
回复

使用道具 举报

17#
 楼主| 发表于 2021-7-25 10:55:10 | 只看该作者
回复

使用道具 举报

18#
 楼主| 发表于 2021-7-25 10:56:08 | 只看该作者
回复

使用道具 举报

19#
发表于 2021-8-6 18:30:24 | 只看该作者
本帖最后由 610644034 于 2021-8-6 18:44 编辑

批处理想要 字符对齐 已经没有什么难度! 本人喜欢中文 批处理 , 发出来给大家参考一下(字符串长度只限制1000 范围 需要的可任意修改):

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:按占位数修正一个字符串的长度
rem :按占位数修正一个字符串的长度 "InOut_ptr"           "In"
rem :参数列表                     输入输出字符串变量名  占位数
if "" EQU "%~1" goto :eof
if "" EQU "!%~1!" goto :eof
if "" EQU "%~2" set "%~1=" & goto :eof
( set /a 按占位数修正一个字符串的长度_占位数=%~2 + 0 )>nul 2>nul
( if 0 EQU !按占位数修正一个字符串的长度_占位数! set "%~1=" & goto :eof )>nul 2>nul
set "按占位数修正一个字符串的长度_输出字符串="
for /l %%i in ( 0 1 999 ) do (
   if "" EQU "!%~1:~%%i,1!" (
      rem echo ************** 1
      set "按占位数修正一个字符串的长度_输出字符串=!%~1:~0,%%i!"
      goto :按占位数修正一个字符串的长度_001
   )
   if !按占位数修正一个字符串的长度_占位数! LEQ 0 (
      set "按占位数修正一个字符串的长度_输出字符串=!%~1:~0,%%i!"
      rem echo ************** 2
      goto :按占位数修正一个字符串的长度_001
   )
   set "按占位数修正一个字符串的长度_临时字符=!%~1:~%%i,1!"
   if !按占位数修正一个字符串的长度_临时字符! GTR Z set /a 按占位数修正一个字符串的长度_占位数=!按占位数修正一个字符串的长度_占位数! - 2
   if !按占位数修正一个字符串的长度_临时字符! LEQ Z set /a 按占位数修正一个字符串的长度_占位数=!按占位数修正一个字符串的长度_占位数! - 1
)
:按占位数修正一个字符串的长度_001
rem echo ************** -- !按占位数修正一个字符串的长度_占位数!
if -1 EQU !按占位数修正一个字符串的长度_占位数! set "按占位数修正一个字符串的长度_输出字符串=!按占位数修正一个字符串的长度_输出字符串:~0,-1!?"
if 0 LSS !按占位数修正一个字符串的长度_占位数! (
   for /l %%i in ( 1 1 !按占位数修正一个字符串的长度_占位数! ) do set "按占位数修正一个字符串的长度_输出字符串=!按占位数修正一个字符串的长度_输出字符串! "
)
if 0 EQU !按占位数修正一个字符串的长度_占位数! set "按占位数修正一个字符串的长度_输出字符串=!%~1!"
set "%~1=!按占位数修正一个字符串的长度_输出字符串!"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


看看对齐效果就是这样的...................


捕获.PNG (44.38 KB, 下载次数: 149)

捕获.PNG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-23 11:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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