[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-033】计算并重写xls文件

出题目的:
       通过解题熟练掌握数值计算的技巧以及重写文件的技巧
加分原则:
       1、完美代码加分15分
       2、思路独特基分5分
       2、代码高效基分4分
       3、代码简洁基分3分
       4、代码通用基分2分
       5、无临时文件基分1分
题目如下:
       有一test.xls文件,原文件及内容如下

链接: https://pan.baidu.com/s/12E6O0w67T1_0MPO-mS2lTQ?pwd=bsk7

      要求通过批处理计算表中各人的工资总和(结果保留两位小数,填写在total后的空格里),并改写test.xls如下图

相关说明:
       1、本题说难不难说容易却不是那么简单,在数值计算上有很多要考虑的问题,大家细心应答了。
       2、暂请版主们不要贴代码,但可以跟贴做提示和指导。
***共同提高***

回二楼这样的方法不是不行,但不通用,如不知道小数后有几位数呢?
***共同提高***

TOP

提示:用delims来处理小数。

[ 本帖最后由 batman 于 2008-12-13 22:49 编辑 ]
***共同提高***

TOP

回5楼:是的,论坛程序处理不了tab,会将tab默认为空格,原来在cn-dos也是这样的,
不知道为什么一直解决不了这个问题。同时提示大家写入xls文件时各列之间应用tab格
开。。。
***共同提高***

TOP

楼上的兄弟还请注意代码的书写规范,分清层次,切不可写在一堆,同时代码还可简化。

[ 本帖最后由 batman 于 2008-12-14 10:45 编辑 ]
***共同提高***

TOP

此题难道就这么难吗?技术组的也没看见几个来接招的!贴出本人的解,大家测试时请将标注为[TAB]的地方改为制表符:

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3" %%a in ('type test.xls') do (
  3.      if not defined flag (
  4.        echo %%b[TAB]%%c>test.xls&set "flag=a"
  5.        ) else (
  6.        if "%%c" neq "" (
  7.          for /f "tokens=1,2 delims=." %%i in ("%%c") do (
  8.               set "a=%%i"&set "b=%%j00"&set "+=+"
  9.               if "!a:~,1!" equ "-" set "+=-"
  10.               set /a num1!+!=!a:-=!,num2!+!=1!b:~,2!%%100
  11.               if !num2! geq 100 set /a num2-=100,num1+=1
  12.               if !num2! lss 0 set /a num2+=100,num1-=1
  13.               if !num2! lss 10 set "num2=0!num2!"
  14.          )
  15.          echo %%b[TAB]%%c>>test.xls
  16.          ) else (
  17.          echo %%a:%%b[TAB]!num1!.!num2!>>test.xls&set /a num1=0,num2=0
  18.       )
  19.     )
  20. )
复制代码



[ 本帖最后由 batman 于 2008-12-16 17:24 编辑 ]
***共同提高***

TOP

本人认为在数值加减计算上用delims=.将数值分为两个部分来计算比较合适,但在数值乘除计算上还是将数值先化为整数来计算再化为小数较为合适。
***共同提高***

TOP

原帖由 terse 于 2008-12-15 23:17 发表
学习了 先计算位数  这样小数可以不考虑其位数
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1-3 delims=        " %%a in ('type test.xls') do (
  if not defined flag (
    echo %%b         ...

trese兄是不是写得复杂了点。。。。
***共同提高***

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

返回列表