![]() |
中国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: 测试发现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: 现在最大应该达不到31 最大9 改一下zh159兄的
[ 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 |