中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » txt中有些相隔的数字,如何输入数字,获得数字相加
« [1] [2] »
作者:
标题: txt中有些相隔的数字,如何输入数字,获得数字相加 上一主题 | 下一主题
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『楼 主』:  txt中有些相隔的数字,如何输入数字,获得数字相加

文本中的内容是:
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
输入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 ]

2008-1-6 20:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

试试这个:
(修正数据超出范围出错)
@echo off
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"

set/p input=input:

call :loop _ %Test%
echo -----
echo =%sss%
pause
exit

:loop
  set n=0
:shiftloop
  if "%1" == "" goto :eof
  set/a n+=1
  if %n% leq %input:~0,1% shift&&goto shiftloop
  set/a sss=%sss%+%1
  echo +%1
  set "input=%input:~1%"
  if not "%input%" == "" goto loop
goto :eof
[ Last edited by zh159 on 2008-1-7 at 01:37 AM ]



2008-1-6 21:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 3 楼』:  

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

2008-1-7 00:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 4 楼』:  

@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 ]



简单!简单!再简单!
2008-1-7 00:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  



  Quote:
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 ]



2008-1-7 01:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 6 楼』:  

谢谢楼上几位!2楼和4楼的都可用。

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

(汗,昨晚不小心碰了下插头重启后就不能联网,直到刚才狠心把杀软卸载了,竟神奇地可以上网了。。。)

2008-1-7 10:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  


@echo off
setlocal EnableDelayedExpansion
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 && echo +%%a && if not "%input%" =="" set test=%%b && goto loop
echo ------
echo =%sss%

:Eloop
set n=-1
for %%n in (zero one two three four five six seven eight nine ten) do (
  set/a n+=1
  if !n! == %sss:~0,1% (
    set sss=%sss:~1%
    set sssE=%sssE% %%n
  )
)
if not "%sss%" == "" goto Eloop

echo =%sssE:~1%
pause


   此帖被 +4 点积分        点击查看详情   
评分人:【 tireless 分数: +4  时间:2008-1-7 14:33




2008-1-7 11:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 8 楼』:  

不能按任意键返回input:吗?另外只显示英文结果就可以了。谢谢

2008-1-7 11:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 9 楼』:  



  Quote:
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兄的

  Quote:
@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 ]

   此帖被 +4 点积分        点击查看详情   
评分人:【 tireless 分数: +4  时间:2008-1-7 14:33




简单!简单!再简单!
2008-1-7 12:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 10 楼』:  

多谢!达到了我想要的

[ Last edited by tireless on 2008-1-7 at 02:48 AM ]

2008-1-7 14:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 11 楼』:  


for /l %%i in (1,1,45) do call set "aaa=%%aaa%%%%i "
set /p in=input:
set /a 1/(in/10000),1/(100000/in)||goto :eof
set /a in1=%in:~0,1%,in2=in1+%in:~1,1%,in3=in2+%in:~2,1%,in4=in3+%in:~3,1%,in5=in4+%in:~4,1%
for %%i in (%aaa%) do set /a num+=1,1/^(num-in1^),1/^(num-in2^),1/^(num-in3^),1/^(num-in4^),1/^(num-in5^)||call set "output=%%output%%%%i "&&set /a out+=%%i
echo %out%=%output%
pause
这个能解决长度的问题吧

2008-1-7 15:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 12 楼』:  

什么长度问题?

我输入的5个数相加最大就是32的

2008-1-7 15:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 13 楼』:  

for /f取值达不到45位,你五位数最大是45位呀

2008-1-7 15:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 14 楼』:  

额。反正不必担心这5个数相加会大于32,我输入的5个数相加都是在32以内的

这样:如果5个数相加大于32就返回到input:

2008-1-7 16:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 15 楼』:  

伤心了我就

2008-1-7 16:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: