中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 计算中英文混合字符长度的方法
作者:
标题: 计算中英文混合字符长度的方法 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  计算中英文混合字符长度的方法

计算中英文混合字符长度的方法,(含空行)
测试暂未发现 bug ......
缺点:
   若文本最后有两行空行,则不需要下面那个for语句,否则无法计算最后一行。
   第二个for就是专门计算最后一行的,不知有没有办法省略掉。
:
@echo off&setlocal enabledelayedexpansion
::code 26933062 @cn-dos 2008-04-20
for /f "tokens=1* delims=:" %%a in ('findstr /o ".*" a.txt') do (
  set "w=%%b"
  if defined n (
     set /a m=%%a-2-n
     echo 第 !h! 行  有 !m! 字节
)
  set /a n=%%a,h+=1
)
::以下是计算最后一行的字节数,若文本最后有两行空行,则不需要此段代码。
for /f "skip=1 delims=:" %%a in ('^(echo "%w%"^&echo.^)^|findstr /o ".*"') do (
   set /a m=%%a-5
)
echo 第 !h! 行  有 !m! 字节
pause>nul
[ Last edited by 26933062 on 2008-4-20 at 04:48 PM ]



致精致简!
2008-4-20 16:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  

早就有了
http://www.cn-dos.net/forum/view ... highlight=%2Beve%2B

2008-4-20 16:47
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 3 楼』:  

我们应该多鼓励发帖者,毕竟可以多交流
--------------------------
后面的部分可以略去:
@echo off&setlocal enabledelayedexpansion
::code 26933062 @cn-dos 2008-04-20
for /f "tokens=1* delims=:" %%a in ('^(type a.txt^&echo.^)^|findstr /o .*') do (
  set "w=%%b"
  if defined n (
     set /a m=%%a-2-n
     echo 第 !h! 行  有 !m! 字节
)
  set /a n=%%a,h+=1
)
pause>nul
findstr /o .* test.txt
是在每行显示字符偏移量,可以转换为字节数,这个论坛里有人发过了就是你后面的部分的代码

如果显示每行的字节数,这个方法的效率还是挺高的,且不生产临时文件。

但是当findstr频繁使用时候效率就很低,最好借助%~za获得字节数,(缺点产生临时文件)

[ Last edited by plp626 on 2008-4-20 at 05:28 PM ]

   此帖被 +11 点积分        点击查看详情   
评分人:【 26933062 分数: +11  时间:2008-4-20 17:28


2008-4-20 17:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 4 楼』:  

type a.txt^&echo.^&echo.^)^|findstr /o .*
好办法,我最开始就是使用这种方法,结合后面的那个for,但是当时没想到第一个for中的方法,后来就以为这样不行,放弃了,,郁闷。。。
后面的方法就是从论坛里看到的。。

发现最后一行结果多了一字节

[ Last edited by 26933062 on 2008-4-20 at 05:34 PM ]



致精致简!
2008-4-20 17:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

:
@echo off&setlocal enabledelayedexpansion
::code 26933062 2008-04-20
set "var=^(type a.txt^&echo.^&echo.^)^|findstr /o .*"
for /f "tokens=1* delims=:" %%a in ('%var%') do (
   if defined n (
      set /a m=%%a-2-n
      set _!h!=第 !h! 行    有 !m! 字节
   )
   set /a n=%%a,h+=1
)
set /a h-=1,m-=1
set _!h!=第 !h! 行    有 !m! 字节
for /l %%a in (1 1 !h!) do echo !_%%a!
pause
[ Last edited by 26933062 on 2008-4-20 at 11:37 PM ]



致精致简!
2008-4-20 18:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 6 楼』:  


# *-* coding:gbk *-*
len('你我he')


2008-4-20 20:26
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: