标题: 如何把所有txt文件中第10行第20个数字相加
[打印本页]
作者: lulala
时间: 2006-9-10 00:04
标题: 如何把所有txt文件中第10行第20个数字相加
请问如何把一个目录下所有txt文件中第10行中第20个字符(肯定是阿拉伯数字)都相加起来算出总值显示在cmd窗口中
不知道可以吗谢谢
[
Last edited by namejm on 2007-2-5 at 10:34 AM ]
作者: namejm
时间: 2006-9-10 01:13
把以下代码放到该目录下运行,同时请保证该目录下只存在参与运算的txt文件:
@echo off
set num=0
setlocal enabledelayedexpansion
for %%i in (*.txt) do (
set file=%%i
for /f "tokens=1* delims=:" %%j in ('findstr /n . !file!') do (
set var=%%k
if %%j equ 10 (set num_=!var:~19,1!)&& set /a num=!num!+!num_!
)
)
echo 相加后的结果是: %num%
pause
[
Last edited by namejm on 2006-9-10 at 06:13 ]
作者: lulala
时间: 2006-9-10 01:48
谢谢你,我试运行了你的程序,原来我前面没写清楚,肯定是第10行,但第几个字符我不知道,因为好象这个数要跨过2个或3个字符.
我上传了几个txt文件,里边的数范围是十位数到千位数.谢谢帮我看看
附件
1:
新建文件夹.rar (2006-9-10 01:48, 743 bytes, 下载附件所需积分 1点
,下载次数: 17)
作者: 9527
时间: 2006-9-10 01:51
@echo off&setlocal
for %%a in (*.txt) do (set c=)&call :ok "%%a"
:ok
for /f "skip=9 usebackq tokens=*" %%x in (%1) do (
if not defined c set "c=%%x"
call set /a pp=pp+%%c:~19,1%%
goto :eof
)
echo %pp%
用另外一种方法完成!!! 不过不知道效果如何??? 呵呵..........
作者: namejm
时间: 2006-9-10 02:03
呵呵,pip的代码直接就取到第10行的内容,比我那个代码的效率要高得多,没注意到效率问题,是我那个代码的一大缺陷。
作者: namejm
时间: 2006-9-10 02:07
Quote: |
Originally posted by lulala at 2006-9-10 01:48:
谢谢你,我试运行了你的程序,原来我前面没写清楚,肯定是第10行,但第几个字符我不知道,因为好象这个数要跨过2个或3个字符.
我上传了几个txt文件, ... |
|
看了你的txt,发现数字是分列显示的,这个就更容易了,但是我不知道你要第几列的数字相加,请明示。
作者: 9527
时间: 2006-9-10 02:11
namejm 兄过谦了,兄在联盟的地位是不可动摇的,我对兄的佩服有如滔滔江水连绵不绝,一发不可收拾!!!
作者: lulala
时间: 2006-9-10 05:49
谢谢楼上几位兄台
我是想把都相加不管几列几列,如243+1246+21....
作者: namejm
时间: 2006-9-10 06:15
我晕,不管3721,只要是数字都相加?这个超级BT啊。
总得指定哪几列的内容相加的嘛,要不然,你这个操作还有什么意义?
作者: lulala
时间: 2006-9-10 06:37
也不是不管几列,都相加,我的意思就是说:在我上传的那个压缩包里的txt文件,3种形式都有了,即十位数,百位数,千位数,一个txt文件中第10行有可能是十位数,也可能是百位数,也可能是千位数,但总有一个数,这个数的位置也基本固定,发现几个txt文件中的数的最后一位(个位数)总在一个固定字符位置
如 1.txt 第10行 123
2.txt 第10行 1234
3.txt 第10行 34
上面 个位数3,4,4的位置应该是对齐的
谢谢你的热心帮助!!!:P
作者: namejm
时间: 2006-9-10 06:48
这个可以不管数字在哪个字符位上,你只要告诉我要把哪个列上的数相加就得了——你总不会连列的意思都闹不明白吧,因为我发现你一直没告诉我要处理哪一列上的,而总是在说某个字符位上的。并且你你举例的内容和上传的文本内容不吻合,我无法得知你的真实意思——你还是就你上传的文件内容举例吧。
作者: lulala
时间: 2006-9-10 07:56
字符位=列
作者: lulala
时间: 2006-9-10 08:00
你只要告诉我要把哪个列上的数相加就得了 ,数是随机的,有可能是十位数,百位数或千位数则么能确定要哪个列数相加呢?
作者: lulala
时间: 2006-9-10 08:04
并且你你举例的内容和上传的文本内容不吻合
形式是相同的,只是换个数字而已啊,目录下有这些txt文件,没规定一定要几个是百位数,几个是千位数,几个是个位数,但他们的位置即个位数的位置总在这个txt文件第10行的固定. 到底是固定第几列我也不好数,因为我不知道做程序的时候从哪开始算第一列.
作者: namejm
时间: 2006-9-10 08:16
Quote: |
Originally posted by lulala at 2006-9-10 07:56:
字符位=列 |
|
我晕,有这样的等式吗?如果你这样认为的话,那我确实帮不了你。
作者: lulala
时间: 2006-9-10 08:42
我也不知道则么说,我不好意思,反正就是一个程序运行后能把目录下txt文件的第10行的第1个数字相加就可以了
如:
1: Anonymous 48 321 166.84 100.00% 0 0.00 NaN%
只要把48加进去就可以了,后面的数字不用管它
我的意思是不同的txt文件,只要加48位置的数字
1: Anonymous 148 321 166.84 100.00% 0 0.00 NaN%
1: Anonymous 48 321 166.84 100.00% 0 0.00 NaN%
1: Anonymous 1148 321 166.84 100.00% 0 0.00 NaN%
上面3个txt文件抽出来的,8的位置都相同都在一列上,程序运行后计算148+48+1148的总和
我学历不高,所以有可能中文水平木够不好意思
作者: namejm
时间: 2006-9-10 09:25
对照了你上传的文件,发现1:的后面有一个空格,那么,1:就应该位于文本的第一列,而148之类的数字就位于文本的第三列,要解决你的问题,可以试一下以下的代码:
@echo off
setlocal enabledelayedexpansion
for %%i in (*.txt) do (
set file=%%i
set count=0
for /f "skip=9 tokens=3" %%j in (!file!) do (
set /a count+=1
if !count! equ 1 set /a sum+=%%j
)
)
echo 相加后的结果是 %sum%
pause
[
Last edited by namejm on 2006-9-10 at 09:28 ]
作者: lulala
时间: 2006-9-10 09:38
谢谢你,已经解决了,我还真不知道列的概念是什么,能帮忙解释下吗,谢谢
作者: namejm
时间: 2006-9-10 10:34
正所谓横行竖列,在文本文件中,横向的文字称为行,行与行之间用回车符号分隔;以空格或者制表符分隔的竖向的文字称为列,如下所示(假设阿拉伯数字是文本的内容),1位于第一行第一列,6位于第二行第三列:
第 第 第
一 二 三
列 列 列
第一行: 1 2 3
第二行: 4 5 6
第三行: 7 8 9
……
[
Last edited by namejm on 2006-9-10 at 10:37 ]
作者: lulala
时间: 2006-9-10 10:42
呵呵,谢谢你这个论坛真不错
作者: lulala
时间: 2006-9-10 10:59
还有个问题,如果这些txt文件在局域网中别的机器上的一个确定目录中,我能在自己机器上运行程序,即算出那个机器上确定目录名下txt的数字总和吗?
那台机器打开admin$,ipc$默认权限