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

[文本处理] 批处理如何将目录行索引切分为目录列索引

[复制链接]
发表于 2013-6-5 21:18:40 | 显示全部楼层
我的理解  前面几个应该就是 你所谓的3分法吧
 楼主| 发表于 2013-6-5 22:33:46 | 显示全部楼层
回复 31# terse

二十一楼就是三分法。
发表于 2013-6-5 22:37:37 | 显示全部楼层
按我理解,就是下面这意思:
假设总行数n,列数l,则行数h=n/l,余数y=n%%l
一、当余数y=0,则直接输出。
二、  余数y>0,则:
                1、l大于h,则前y列各加一行为h+1,后l-y列为h行
                2、l小于等于h,则前l-1列各加一行为h+1,余者为最后一列即n-(l-1)*(h+1)行

改下代码半小时不到,理解楼主的意思花了两天最后还是靠瞎猜出来的。
 楼主| 发表于 2013-6-5 22:41:40 | 显示全部楼层
回复 33# xxpinqz

是这个意思。但我没有按写程序的方式来表达,让你费心了。请原谅。
发表于 2013-6-5 22:44:11 | 显示全部楼层
回复 34# pan528
难道 我26楼代码 只能2分或者3分吗?
应该两则都兼容
 楼主| 发表于 2013-6-5 22:50:21 | 显示全部楼层
回复 35# terse


我试了一下,26楼的代码只能二分法,21楼的代码是三分法。
发表于 2013-6-5 22:55:54 | 显示全部楼层
回复 36# pan528
26楼代码 将if !j! leq 0 set j=n  改 set j=n 试下
应该这样了
发表于 2013-6-6 02:32:40 | 显示全部楼层
我早先是靠测试弄懂了楼主的规则,但是没有好的思路,想法太繁琐,应该有更好的就题解题算法,目测 plp626 能手到擒来
发表于 2013-6-6 11:47:24 | 显示全部楼层
我目前 最直观的解  set /a 行=(总行+列-1)/列,余=(总行%%列)*行
得到 行 和 余的值
只要在 FOR 循环  判断总行 和 余 关系 应该够解了吧
发表于 2013-6-6 12:50:04 | 显示全部楼层
回复 39# terse
话说我的数学就是加减乘除 ,所以算法吃不透,目测26楼代码是按输完一列再接着输下一列的按顺序输出
所以判断是否所谓三分也应该要用n/l来判断,而非0。
扯了3页,就下面两句是亮点:
8楼的set /a 行数=(n+列数-1)/ 列数
26楼的set /a "m=(%%i--~j)%%_i+1"
向两位高手致敬~~
发表于 2013-6-6 13:33:03 | 显示全部楼层
回复 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
复制代码
发表于 2013-6-6 13:36:06 | 显示全部楼层
唉 惭愧我的理解力  但楼主的表达也太那个了  
都和我一样 国语学得不好
 楼主| 发表于 2013-6-6 16:51:49 | 显示全部楼层
回复 41# terse

测试通过!是三分法。不过最后多了一个回车,不知问题出在哪?
发表于 2013-6-6 23:36:47 | 显示全部楼层
你是指最后的回车行是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
复制代码
 楼主| 发表于 2013-6-7 21:11:28 | 显示全部楼层
回复 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
我怀疑是算法有问题。
各位高手找找原因吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 10:31 , Processed in 0.017123 second(s), 6 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表