标题: 请教加减运算!
[打印本页]
作者: 3391617
时间: 2008-10-25 16:02
标题: 请教加减运算!
假设a.txt有如下内容:
13.611,2.636
19.853,5.102
23.998,5.282
28.310,4.296
37.505,3.145
...
...
想实现:"下一行开头减上一行开头,下一行末尾减上一行末尾"
即得到结果6.242,2.466>>b.txt
...
依次类推计算至末尾。。。
最终b.txt结果为:
6.242,2.466
4.145,0.18
....
请高手指点下如何能实现
研究好久也没弄出来
先谢过了~~
[
Last edited by 3391617 on 2008-10-25 at 16:08 ]
作者: tireless
时间: 2008-10-25 16:40
也就是两行两行计算?是这样吗:
a.txt中的第2行减第1行的结果>>b.txt
a.txt中的第4行减第3行的结果>>b.txt
作者: leonlau
时间: 2008-10-25 16:43
......
附件
1:
截图.jpg (2008-10-25 16:43, 60.67 K,下载次数: 2)
作者: 3391617
时间: 2008-10-25 16:52
2楼说的对,就是这个意思,“,”前后的数分别减上一行的!
第2行-第1行
第3行-第2行
第4行-第3行
...
[
Last edited by 3391617 on 2008-10-25 at 16:53 ]
作者: youkaib
时间: 2008-10-25 17:03
呵呵,我试了几下。我先告诉你,批处理不能对小数进行计算。
分隔符不能用逗号。
[
Last edited by youkaib on 2008-10-25 at 17:06 ]
作者: youkaib
时间: 2008-10-25 17:14
我给个思路。
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,20) do ( :::这里只是循环作用
call :b
echo !sum!
pause
)
:b
for /f %%a in (a.txt) do (
for /f "skip=1" %%b in (a.txt) do (
echo !!
set /a sum=!sum2!-!sum1!
)
)
goto :eof
这个是达不到你要求。
[
Last edited by youkaib on 2008-10-25 at 17:16 ]
作者: 3391617
时间: 2008-10-25 17:23
我测试一下看看
作者: 3391617
时间: 2008-10-25 17:46
Quote: |
Originally posted by youkaib at 2008-10-25 05:14 PM:
我给个思路。
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,20) do ( :::这里只是循环作用
call :b
echo !sum!
pause
)
:b
for /f %%a in (a.txt) do (
for /f &qu ... |
|
提示:运算符不存在!!。。。
还有,这个没有把a.txt中“,”前后的数给分开运算啊
[
Last edited by 3391617 on 2008-10-25 at 17:48 ]
作者: terse
时间: 2008-10-25 18:04
@echo off&setlocal enabledelayedexpansion
echo.>b.txt
for /f %%i in (test.txt) do (
if defined b (
set A=%%i
set A=!A:.=!
set A=!A:,=!
call:lp !a!)else (
set B=%%i
set B=!B:.=!
set B=!B:,=!
))
start b.txt
exit
:lp
if !n! equ 3 (set T=.!T!)else (if !n! equ 4 (set T=,!T!)else if !n! equ 7 set T=.!T!)
set /a n+=1
if !A:~-1! geq !B:~-1! (
set/a s=!A:~-1!-!B:~-1!
set T=!s!!T!
set A=!A:~,-1!&set B=!B:~,-1!
if not defined B goto next
goto lp
)
set/a s=1!A:~-1!-!B:~-1!
set T=!s:~,1!!T!
set A=!A:~,-1!&set B=!B:~,-1!
set Ts=1!A:~-9!
set/a Ts-=1
set A=!A:~,-9!!Ts:~1!
if defined B goto lp
:next
for /f "delims=0 tokens=*" %%i in ("!A!!T!") do set str=%%i
>>b.txt echo !str!
set "t="&set "b=%1"&set "n="
goto :eof
作者: 3391617
时间: 2008-10-25 18:16
TO:9楼
如果后一行的数比前一行的小,结果不正确。。。
你的代码好复杂。。。偶太菜。。。看不懂。。。
作者: terse
时间: 2008-10-25 18:40
Quote: |
Originally posted by 3391617 at 2008-10-25 18:16:
TO:9楼
如果后一行的数比前一行的小,结果不正确。。。
你的代码好复杂。。。偶太菜。。。看不懂。。。 |
|
如果后一行的数比前一行的小 你想怎么处理 得负数吗?还是大-小
作者: 3391617
时间: 2008-10-25 18:47
TO:11楼
得负数!
请问我给a、b附值错在哪里??
写了这两句:
set a="sed '%n%q;d' 1.txt"
set b="sed '%n%q;d' 2.txt"
[
Last edited by 3391617 on 2008-10-25 at 18:54 ]
作者: HAT
时间: 2008-10-25 18:50
标题: Re 12楼
批处理不允许这样赋值
可以把sed放在for里面再给a或者b赋值
作者: 3391617
时间: 2008-10-25 18:57
ECHO结果也不能用SET赋值吗?
谢谢BZ,还是有点迷糊
能说详细点么?
我再研究研究
[
Last edited by 3391617 on 2008-10-25 at 19:02 ]
作者: HAT
时间: 2008-10-25 19:02
标题: Re 14楼
echo也不能直接给变量赋值
建议多看教程
作者: pusofalse
时间: 2008-10-25 21:33
初学AU3,用它给你写一个,思路跟BAT的相同。。。
if fileexists ("new.txt") then filedelete ("new.txt")
$file = Fileopen("a.txt",0)
dim $var1,$var2, $str[2], $num1, $num2,$enkey=@crlf,$numeric1, $numeric2
while 1
$str = FilereadLine($file)
if @error = -1 then exitloop
$str = StringSplit ($str, ",")
$num1 += 1
$numeric1 +=1
$num2 = $num1 - 1
$numeric2 = $numeric1 - 1
assign ($num1, $str[1])
assign ("_" & $numeric1,$str[2])
$s = eval ($num1)
$d = eval ("_" & $numeric1)
$a = eval ($num2)
$e = eval ("_" & $numeric2)
if $num1 > 1 then
$var1 = $s - $a
$var2 = $d - $e
filewrite ("new.txt",$var1 &","&$var2 &$enkey)
endif
wend
作者: youkaib
时间: 2008-10-26 12:46
Quote: |
Originally posted by 3391617 at 2008-10-25 17:23:
我测试一下看看 |
|
我不是说了你记事本存在小数的问题吗,你可以直接下cmd下写
set /a a=1.2-1.1
就会出现这个提示。
由于赋予变量会将整个a.txt的值赋予他,所以必须将他们隔开。
作者: 3391617
时间: 2008-10-26 18:01
有办法计算小数的
我翻过帖子
看到过
作者: shqf
时间: 2008-10-26 20:38
都是三位小数的话,可用如下程序:
@echo off&setlocal EnableDelayedExpansion
cd.>b.txt 2>nul
for /f "tokens=1,2 delims=," %%a in (a.txt) do (
if defined num1 (
set num3=%%a
set num4=%%b
set num3=!num3:.=!
set num4=!num4:.=!
set /a cha1=num3-num1
call :jiance !cha1!
set cha1=!cha!
set /a cha2=num4-num2
call :jiance !cha2!
set cha2=!cha!
set "cha1=!cha1:~0,-3!.!cha1:~-3,3!"
set "cha2=!cha2:~0,-3!.!cha2:~-3,3!"
echo !cha1!,!cha2!>>b.txt
)
set num1=%%a
set num2=%%b
set num1=!num1:.=!
set num2=!num2:.=!
)
echo OK.&pause
exit
:jiance
set cha=%1
if "%cha:~0,1%"=="-" (set fuhao=-&set cha=%cha:~1%) else (set fuhao=)
if %cha% lss 10 (set cha=%fuhao%000%cha%&goto :eof)
if %cha% lss 100 (set cha=%fuhao%00%cha%&goto :eof)
if %cha% lss 1000 (set cha=%fuhao%0%cha%&goto :eof)
set cha=%fuhao%%cha%
goto :eof
[
Last edited by shqf on 2008-10-26 at 20:44 ]
作者: 3391617
时间: 2008-10-26 22:16
TO:19楼
测试可以!
小数整数都没有限制的版本可以做到不呢?
我先研究研究你这个,谢谢各位的帮助了!不胜感激!
作者: HAT
时间: 2008-10-26 22:31
标题: Re 20楼
BAT调用VBS来计算吧