[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 40# xxpinqz
再仔细回看前面 猜真这次应该理解了
先粗糙一个
感觉代码写得太啰嗦   等下再看有 优化的可能不
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 REM|more /t32 >n.txt
  3. set L=5
  4. set "file=a1.txt"
  5. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  6. for /f "usebackq tokens=*" %%i in ("%file%") do set /a N+=1&set #!N!=%%i
  7. set /a h=(n+l-1)/l,j=n,i=1
  8. if !h! lss !l! set /a j=(n%%l)*H
  9. for /l %%i in (1 1 %n%) do (
  10.     set /a "t=^!^!(~-%%i/j)"
  11.     set /a "m=(~-%%i-(t*j))%%(~-H+i*^!t)+1"
  12.     for %%j in (!m!) do set "$%%j=!$%%j!%tab%!#%%i!"
  13. )
  14. for /l %%i in (1 1 %h%) do for /f "tokens=*" %%j in ("!$%%i!") do echo %%j
复制代码

TOP

唉 惭愧我的理解力  但楼主的表达也太那个了  
都和我一样 国语学得不好

TOP

你是指最后的回车行是MORE留下的吧
代码再少点变量
另补上exit
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 :|more /t32 >n.txt&exit
  3. set L=9
  4. set "file=a.txt"
  5. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  6. for /f "usebackq tokens=*" %%i in ("%file%") do set /a N+=1&set #!N!=%%i
  7. set /a h=(n+l-1)/l,j=n
  8. if !h! lss !l! set /a j=(n%%l)*h
  9. for /l %%i in (1 1 %n%) do (
  10.     set /a "i=^!(~-%%i/j),m=(~-%%i-(^!i*j))%%(~-H+i)+1"
  11.     for %%j in (!m!) do set "$%%j=!$%%j!%tab%!#%%i!"
  12. )
  13. for /l %%i in (1 1 %h%) do for /f "tokens=*" %%j in ("!$%%i!") do echo %%j
复制代码

TOP

回复 30# pan528
也许代码的算法有误
这样吧 你把44楼代码里  if !h! lss !l! set /a j=(n%%l)*h 这里的 LSS 改为GTR 看是否你要的
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 :|more /t32 >n.txt&exit
  3. set L=9
  4. set "file=test.txt"
  5. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  6. for /f "usebackq tokens=*" %%i in ("%file%") do set /a N+=1&set #!N!=%%i
  7. set /a h=(n+l-1)/l
  8. if !h! gtr !l! set /a j=(n%%l)*h
  9. if !j! equ 0 set j=!n!
  10. for /l %%i in (1 1 %n%) do (
  11.     set /a "i=^!(~-%%i/j),m=(~-%%i-(^!i*j))%%(~-H+i)+1"
  12.     for %%j in (!m!) do set "$%%j=!$%%j!%tab%!#%%i!"
  13. )
  14. for /l %%i in (1 1 %h%) do for /f "tokens=*" %%j in ("!$%%i!") do echo %%j
复制代码
代码处理流程是这样的
当行大于列 或 行小于列时的输出是不一样的

TOP

本帖最后由 terse 于 2013-6-8 14:10 编辑

有点给数字绕晕的感觉
只能再试着简化下 思路闭塞 总不能突破
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 :|more /t32 >n.txt&exit
  3. set "file=test.txt"
  4. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  5. for /f "usebackq tokens=*" %%i in ("%file%") do set /a N+=1&set #!N!=%%i
  6. set L=9
  7. set /a "h=(n+l-1)/l,i=^!(~-l/h),j=^!i*(n%%l)*h+i*n"
  8. for /l %%i in (1 1 !n!) do (
  9.     set /a "i=^!(~-%%i/j),m=(~-%%i-(^!i*j))%%(~-h+i)+1"
  10.     for %%j in (!m!) do set "$%%j=!$%%j!%tab%!#%%i!"
  11. )
  12. for /l %%i in (1 1 !h!) do for /f "tokens=*" %%j in ("!$%%i!") do echo %%j
复制代码
既然MORE 最后回车肯定有 没必要再处理它了吧
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 %0 :|more /t32 >n.txt&exit
  3. set "file=test.txt"
  4. for /f "delims=U" %%a in ('cmd /u /c echo 唉') do set "tab=%%a"
  5. for /f "usebackq tokens=*" %%i in ("%file%") do set /a N+=1&set #!N!=%%i
  6. set L=9
  7. set /a "h=(n+l-1)/l,j=n%%l,i=^!(l/h)"
  8. if !j! equ 0 (set j=!n!)else set /a "j=~-l*h*i+j*h"
  9. for /l %%i in (1 1 !n!) do (
  10.     set /a "i=^!(~-%%i/j),m=(~-%%i-(^!i*j))%%(~-h+i)+1"
  11.     for %%j in (!m!) do set "$%%j=!$%%j!%tab%!#%%i!"
  12. )
  13. for /l %%i in (1 1 !h!) do for /f "tokens=*" %%j in ("!$%%i!") do echo %%j
复制代码

TOP

本帖最后由 terse 于 2013-6-9 23:36 编辑

不是列大于行 3分吗
余数: 34/9 应该余7  7大于行4啊
这里的余数是否 应该  34/4 余 2 ?

你30楼的描述
..三分法就是:在上面二分法的基础上,对切分列数小于每列行数的情形,用另一种方法排列,即把所有空格放在最后一列。...

TOP

返回列表