Board logo

标题: [文本处理] 记事本中最长的行和最短的行进行组合,批处理怎么做? [打印本页]

作者: moka_8    时间: 2018-7-19 23:18     标题: 记事本中最长的行和最短的行进行组合,批处理怎么做?

记事本 a.txt 里含有内容如下:
111
2222
33333
444444
5555555
66666666
777777777
8888888888

然后a.txt记事本中,最长的行和最短的行组合成一行并输出到记事本 b.txt 里

记事本b.txt  内容如下:

8888888888,111
777777777,2222
66666666,33333
5555555,444444

这样的批处理文件怎么写,求教
作者: Batcher    时间: 2018-7-20 09:12

原文件的内容已经按照每行的长度进行排序了吗?
你给的这个例子行数是偶数,如果遇到行数是奇数的文件,中间那一行跟谁合并呢?
作者: moka_8    时间: 2018-7-20 09:24

本帖最后由 moka_8 于 2018-7-20 09:37 编辑

奇数的话,单独的那一行就不合并,单独出来就行了

内容一般是杂乱的,但是我可以先排序了再处理
作者: moka_8    时间: 2018-7-20 09:55

换个思路,记事本有N多行文字,已经按照长短进行了排序,现在需要的就是取第一行和最后一行组合,第二行与倒数第二行进行组合,以此类推.......,如果是奇数行,两两组合完了以后,单独出来的一行就不组合了;原来的两行用问号隔开。

原内容:

阿萨德飒沓
但萨嘎第三个第三个梵蒂

组合后:

但萨嘎第三个第三个梵蒂?阿萨德飒沓
作者: xxpinqz    时间: 2018-7-20 20:57

  1. @echo off&setlocal enabledelayedexpansion
  2. set "src=a.txt"
  3. set "dst=new_a.txt"
  4. for /f "tokens=2 delims=:" %%a in ('find /c /v "" "%src%"') do set/a n=%%a/2,m=%%a%%2,num=-1
  5. sort /+65535 /rec 65535 "%src%">tmp
  6. (for /f "delims=" %%a in ('type "%src%"') do (
  7.     set "str="
  8.     set /p str=
  9.     set /a num+=1,1/(n-num^)||goto:q
  10.     echo,%%a?!str!
  11. ))<tmp>"%dst%" 2>nul
  12. :q
  13. if %m% equ 1 echo,%str%>>"%dst%"
  14. del tmp
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2