Board logo

标题: [文本处理] 批处理如何将以指定字符分割的多个字段按指定数目分行 [打印本页]

作者: 598seo    时间: 2013-12-19 15:10     标题: 批处理如何将以指定字符分割的多个字段按指定数目分行

本帖最后由 pcl_test 于 2016-8-15 16:15 编辑

批处理怎样把5个词分成一排?
文件1.txt里面的内容

a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

现在要把5个词分成一排

a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
p,q,r,s,t
u,v,w,x,y
z
这样可以实现吗?谢谢了!
作者: battab    时间: 2013-12-19 17:05

本帖最后由 battab 于 2013-12-19 17:07 编辑
  1. @echo off
  2. for /f %%i in (1.txt) do (
  3. set str=%%i
  4. setlocal enabledelayedexpansion
  5. echo !str:~0,9!>>2.txt
  6. echo !str:~10,9!>>2.txt
  7. echo !str:~20,9!>>2.txt
  8. echo !str:~30,9!>>2.txt
  9. echo !str:~40,9!>>2.txt
  10. echo !str:~50,9!>>2.txt
  11. endlocal )
复制代码
逗号要换成英文状态下输入的才行。
作者: 598seo    时间: 2013-12-19 17:20

回复 2# battab


    你这样不行!5个词分成1行,而不是固定字数分成一行。
作者: 1270697389    时间: 2013-12-19 18:04

这种情况你要上传你的真实数据才行,你举例是没有用的。
作者: terse    时间: 2013-12-19 20:15

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do call :loop "%%a"
  3. pause
  4. exit/b0
  5. :loop
  6. for /f "tokens=1-5* delims=,," %%a in ("%~1") do (
  7.     set "str=%%a,%%b,%%c,%%d,%%e"
  8.     set str=!str:,,=!
  9.     if "!str:~-1!" == "," (
  10.        echo !str:~,-1!
  11.     ) else echo;!str!
  12.     call :loop "%%f"
  13. )
复制代码

作者: PowerShell    时间: 2013-12-19 21:40

本帖最后由 PowerShell 于 2013-12-19 21:48 编辑

你可以参考这篇帖子  如何把txt文本内容每间隔37行加空行一次    http://www.bathome.net/thread-27948-1-1.html
powershell代码,需要powershell 3.0及以上版本,
win8,及以上无需安装
如果是win7,需要手动安装powershell 4.0,详见powershell版 的  2.0  3.0  4.0 安装置顶帖子
  1. Get-Content -Delimiter ',' aaa.csv -ReadCount 5|ForEach-Object { $_ -join ""} |out-file .\b.txt
复制代码
我win8.1测试通过
作者: 598seo    时间: 2013-12-21 11:00

1.txt的内容:

写完了,我,情绪,没有恢复,至今,打字,时候,还是习惯性,打出等字眼,这是一段难忘,日子,我喜欢这些人,君无悔,英雄,东方问心,执着,夜孤寒,深情,梅雪烟,雍容

想要得到的结果:(也就是每5个逗号分为一组)
写完了,我,情绪,没有恢复,至今,
打字,时候,还是习惯性,打出等字眼,这是一段难忘,
日子,我喜欢这些人,君无悔,英雄,东方问心,
执着,夜孤寒,深情,梅雪烟,雍容
作者: lifei259    时间: 2013-12-21 11:56

  1. @echo off
  2. set m=1&set n=5
  3. :aaa
  4. for /f "tokens=%m%-%n% delims=," %%a in ('type "1.txt"') do (
  5. set /a n+=5&set /a m+=5
  6. echo,%%a,%%b,%%c,%%d,%%e,
  7. goto :aaa
  8. )
  9. pause>nul
复制代码

作者: 598seo    时间: 2013-12-21 12:19

回复 8# lifei259


    你这个很不错    那得到的结果能不能自动生成2.txt?
作者: lifei259    时间: 2013-12-22 13:41

回复 9# 598seo
  1. @echo off
  2. set m=1&set n=5
  3. :aaa
  4. for /f "tokens=%m%-%n% delims=," %%a in ('type "1.txt"') do (
  5. set /a n+=5&set /a m+=5
  6. echo,%%a,%%b,%%c,%%d,%%e,>>2.txt
  7. goto :aaa
  8. )
  9. pause>nul
复制代码

作者: 598seo    时间: 2014-1-8 12:51

回复 10# lifei259


    您好!谢谢您!但是这样分出来最多只有6行。但是我的词远远不止6行那么多。能帮我再做一下吗?感激涕零~!
作者: pcl_test    时间: 2016-8-15 16:23

第三方
  1. gawk "gsub(/([^,,]*(,|,)){5}/,\"^&\n\")" "a.txt"|find /v ""
  2. pause
复制代码





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