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

回车没有剔除,我还发现一个新问题:所有代码在34/9时都变成了二分法!即:
1    5    9    13   17   21   25   29   32
2    6    10   14   18   22   26   30   33
3    7    11   15   19   23   27   31   34
4    8    12   16   20   24   28
而三分法应为:
1    5    9    13   17   21   25   29   33
2    6    10   14   18   22   26   30   34
3    7    11   15   19   23   27   31
4    8    12   16   20   24   28   32
我怀疑是算法有问题。
各位高手找找原因吧。

TOP

你们的代码太精炼了,我许多方面都没有看明白。
我以前写了一个切分文本的代码,很菜。代码很长,很繁琐,方法也简单,拿出来请各位高手改改。
但,我试过好多次,没有出错过。
  1. :: 代码代号含义:
  2. :: k=文本总行数
  3. :: cut=切分的列数
  4. :: x=k/c=每列的行数
  5. :: r=remainder=余数行=k-cx
  6. :: ak=总添加的行数=(cut*(x+1))-k
  7. :: s=记录当前文件需要排列的行数=x或(x+1)
  8. :: s2=少行列=s-ak
  9. :: n=记录当前列输出到第几行
  10. :: m=记录当前输出到第几个文件
  11. @echo off
  12. title 切分文本程序(三分法)
  13. set file=a
  14. set Cut=9
  15. setlocal enabledelayedexpansion
  16. for /f "delims=" %%a in (%file%.txt) do set/a k+=1
  17. set /a x=%k%/%Cut%
  18. set /a r=%k%-%Cut%*%x%
  19. set /a ak=(%Cut%*(%x%+1))-%k%
  20. set m=
  21. set m=1
  22. set n=
  23. for /f "delims=" %%i in (%file%.txt) do (
  24. set /a n+=1
  25. if !r! leq 0 (
  26. set /a s=%x%
  27. if !n! leq !s! echo %%i>>%file%_!m!.txt
  28. if !n! equ !s! set n=0 & set /a m+=1
  29. ) else (
  30. set /a s=%x%+1
  31. if !ak! lss !s! (
  32. if !n! leq !s! echo %%i>>%file%_!m!.txt
  33. if !n! equ !s! set n=0 & set /a m+=1
  34. if !m! equ !cut! set /a s2=!s!-!ak!
  35. if !n! equ !s2! for /l %%i in (1,1,%ak%) do echo.>>%file%_!cut!.txt
  36. ) else (
  37. if !m! leq !r! (
  38. if !n! leq !s! echo %%i>>%file%_!m!.txt
  39. if !n! equ !s! set n=0 & set /a m+=1
  40. ) else (
  41. if !m! gtr !r! if !n! leq !x! echo %%i>>%file%_!m!.txt
  42. if !m! gtr !r! if !n! equ !x! echo.>>%file%_!m!.txt
  43. if !n! equ !x! set n=0 & set /a m+=1
  44. )
  45. )
  46. )
  47. )
  48. endlocal
  49. goto:eof
复制代码

TOP

回复 47# terse

34/9通过了,34/11又变成了9列,我想算法可能有缺陷或漏洞 ...

TOP

回复 49# terse
34/11,34/9都通过了,但是仍二分法,不是三分法:

二分法:
1       5       9       13      17      21      25      29      32
2       6       10      14      18      22      26      30      33
3       7       11      15      19      23      27      31      34
4       8       12      16      20      24      28

三分法:(余数小于每列的行数时,空行全部放在最后一列)
1       5       9       13      17      21      25      29      33
2       6       10      14      18      22      26      30      34
3       7       11      15      19      23      27      31
4       8       12      16      20      24      28      32

TOP

返回列表