返回列表 发帖
原帖由 batman 于 2008-12-16 17:20 发表

trese兄是不是写得复杂了点。。。。

确实如兄所言  
计算位数 且分步了 然后补位  
效率都给了计算位数  不考虑位数代码效率似乎可提高些许
发个 小数点后5位的
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=    " %%a in ('type "test.xls"') do (
  if not defined flag (
     echo %%b        %%c>test.xls&set "flag=a"
     ) else (
       if "%%c"=="" (
       >>test.xls echo %%a:%%b    !num:~,-5!.!num:~-5!
       set num=
     ) else (
       >>test.xls echo %%b        %%c
       set str=%%c
       set str1=!str:*.=!
       if "!str1!"=="%%c" set str1=
       call set str2=%%str:.!str1!=%%
       set str1=!str1!00000
       set str1=!str1:~,5!
       set/a num+=!str2!!str1!
     )
   )
)
pauseCOPY

[ 本帖最后由 terse 于 2008-12-16 22:23 编辑 ]

TOP

@echo on &setlocal enabledelayedexpansion
set/a m=2,n=-1
for /f "tokens=1-3 delims=        " %%i in (test.xls) do (
        set/a n+=1
        if !n!==0 (>test.xls echo %%j        %%k) else (
                if "%%j"=="total" (
                >>test.xls echo %%i:%%j        =sum(b!m!:b!n!^)
                set/a m=n+2
                ) else (
                >>test.xls echo %%j        %%k
                )
        )
)
exitCOPY
echo以及delims后面的空格都是一个TAB字符.顺便问问各位老大,怎么用p把数据写进已经排版的xls文件(比如居中,改变了列宽等)中呢?

[ 本帖最后由 qlcom 于 2008-12-18 20:15 编辑 ]
1

评分人数

TOP

原帖由 qlcom 于 2008-12-18 20:01 发表
@echo on &setlocal enabledelayedexpansion
set/a m=2,n=-1
for /f "tokens=1-3 delims=        " %%i in (test.xls) do (
        set/a n+=1
        if !n!==0 (>test.xls echo %%j        %%k) else (
    ...

set/a m=n+2 兄弟可以仔细看下文件是没有规律的,但你这种方法确是可取的,利用xls的函数公式,好!为这思路加分。
***共同提高***

TOP

原帖由 batman 于 2008-12-19 08:19 发表

set/a m=n+2 兄弟可以仔细看下文件是没有规律的,但你这种方法确是可取的,利用xls的函数公式,好!为这思路加分。


谁说没规律,total占一行(而去掉第一行后,除了total所在的行以外都要参加计算),下一个计算起点比起上一个计算终点的行数刚好相差2,顺便麻烦楼主帮我在本版求问的帖子解下锁,谢谢!

TOP

加减法的运算就按照大数的写法就行了.
小数点后面补0到相等长度.在计算. 判断是否有进位.之后在处理整数..整数我想个人的工资不会有超过8位数的人才吧.
所以整体思路. 区分整数和小数,,小数补0至2数相等长度.在按大数四则计算小数.

TOP

@echo off & setlocal enabledelayedexpansion
cd.>_new.xls
::解题思路为提升小数为整数
for /f "tokens=1,2,3 delims= " %%i in (test.xls) do (
if "%%j" equ "total" (
echo %%i %%j !_%%i:~0,-2!.!_%%i:~-2!>>_new.xls
) else (
echo %%i %%j %%k>>_new.xls
set _tmp=%%k
set /a _decimal=!_tmp:.=*0+!
set /a "_%%i+= _decimal + _tmp*100"
)
)
pauseCOPY
非常批处理3群:56794763
有偿写程序.
批处理, lua, c, c++, vba, php, css

TOP

返回列表