中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 05:29
48,040 主题排行 / 350,125 发帖 / 今日 1 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » txt中有些相隔的数字,如何输入数字,获得数字相加
可打印版本  1,933 / 16
第1楼 tireless 发表于 2008-01-06 20:05
银牌会员 发帖 1,122 积分 2,025
txt中有些相隔的数字,如何输入数字,获得数字相加
文本中的内容是:


输入5个数字,如52559,则计算第5位+第(5+2)位+第(5+2+5)位+第(5+2+5+5)位+第(5+2+5+5+9)位的结果

2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100

[ Last edited by tireless on 2008-1-7 at 04:34 AM ]
第2楼 zh159 发表于 2008-01-06 21:30
金牌会员 发帖 1,467 积分 3,687
试试这个:
(修正数据超出范围出错)


[ Last edited by zh159 on 2008-1-7 at 01:37 AM ]
第3楼 junchen2 发表于 2008-01-07 00:33
高级用户 发帖 219 积分 537 来自 杭州--半山
echo off
set /p data_sum=data_sum number :
awk -v fn=%data_sum% "{for(i=1;i<=length(fn);i++){sum+=substr(fn,i,1)};if(sum<=NF){for

(i=1;i<=length(fn);i++){total+=$(fsum+=substr(fn,i,1))}} else {print \"warning:超过字段数,

注意!\"}};END{print total}" 1.txt
pause
第4楼 terse 发表于 2008-01-07 00:58
银牌会员 发帖 946 积分 2,404
@echo off
set/p input=input:
set "Test=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100"
:loop
set/a n=%input:~0,1%
set "input=%input:~1%"
for /f "tokens=%n%*" %%a in ("%Test%") do set/a sss+=%%a&&if not "%input%" =="" set test=%%b && goto loop
echo %sss%
pause

刚发现 最后一个取不了 改过

[ Last edited by terse on 2008-1-7 at 01:38 AM ]
第5楼 zh159 发表于 2008-01-07 01:39
金牌会员 发帖 1,467 积分 3,687
Originally posted by terse at 2008-1-7 00:58:
@echo off
set/p input=input:
set "Test=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100"
:loop
set/a n=%input:~0,1%
set "input=%input:~1%"
for /f "tokens=%n%*" %%a in ("%Test%") do set/a sss+=%%a&&if not "%input%" =="" set test=%%b && goto loop
echo %sss%
pause

刚发现 最后一个取不了 改过

测试发现tokens=n单个最大只能达到31

[ Last edited by zh159 on 2008-1-7 at 01:54 AM ]
第6楼 tireless 发表于 2008-01-07 10:24
银牌会员 发帖 1,122 积分 2,025
谢谢楼上几位!2楼和4楼的都可用。

再要求个小小的更改:
1.显示出结果后,按任意键回到"input"而不是退出
2.可否把结果用英文显示,每个数字空格分开。
如结果为302,则显示为three zero two

(汗,昨晚不小心碰了下插头重启后就不能联网,直到刚才狠心把杀软卸载了,竟神奇地可以上网了。。。)
第7楼 zh159 发表于 2008-01-07 11:25
金牌会员 发帖 1,467 积分 3,687
第8楼 tireless 发表于 2008-01-07 11:36
银牌会员 发帖 1,122 积分 2,025
不能按任意键返回input:吗?另外只显示英文结果就可以了。谢谢
第9楼 terse 发表于 2008-01-07 12:30
银牌会员 发帖 946 积分 2,404
Originally posted by zh159 at 2008-1-7 01:39:

测试发现tokens=n单个最大只能达到31

[ Last edited by zh159 on 2008-1-7 at 01:54 AM ]

现在最大应该达不到31 最大9
改一下zh159兄的

@echo off
:start
set sssE=
set sss=
set/p input=input:
set "Test=2 0 50000 50 0 20 4 1000 0 10 30 0 500 0 100 50000 2 0 1000 50 0 2 0 10 500 30 0 2 70 0 1000 100"
:loop
set/a n=%input:~0,1%
set "input=%input:~1%"
for /f "tokens=%n%*" %%a in ("%Test%") do set/a sss+=%%a&& if not "%input%" =="" set test=%%b && goto loop
if %sss% equ 10 echo ten&&goto start
:Eloop
set/a n=%sss:~0,1%+1
set sss=%sss:~1%
for /f "tokens=%n%" %%a in ("zero one two three four five six seven eight nine") do set ssse=%ssse% %%a&&if not "%sss%" == "" goto Eloop
echo %ssse:~1%
goto start


[ Last edited by terse on 2008-1-7 at 01:27 PM ]
第10楼 tireless 发表于 2008-01-07 14:34
银牌会员 发帖 1,122 积分 2,025
多谢!达到了我想要的

[ Last edited by tireless on 2008-1-7 at 02:48 AM ]
第11楼 everest79 发表于 2008-01-07 15:17
金牌会员 发帖 1,127 积分 2,564


这个能解决长度的问题吧
第12楼 tireless 发表于 2008-01-07 15:42
银牌会员 发帖 1,122 积分 2,025
什么长度问题?

我输入的5个数相加最大就是32的
第13楼 everest79 发表于 2008-01-07 15:59
金牌会员 发帖 1,127 积分 2,564
for /f取值达不到45位,你五位数最大是45位呀
第14楼 tireless 发表于 2008-01-07 16:22
银牌会员 发帖 1,122 积分 2,025
额。反正不必担心这5个数相加会大于32,我输入的5个数相加都是在32以内的

这样:如果5个数相加大于32就返回到input:
第15楼 everest79 发表于 2008-01-07 16:41
金牌会员 发帖 1,127 积分 2,564
伤心了我就
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023