Board logo

标题: [文本处理] txt文件内容列转行(同列内容合并成一行) [打印本页]

作者: cobinzhang    时间: 2014-5-7 19:19     标题: txt文件内容列转行(同列内容合并成一行)

大约有100个txt文件要转置一下,就是将每个文件里的列变成行,行变成列(示例见3楼)怎么批处理方便一点?求代码
上传3个示例文件
作者: CrLf    时间: 2014-5-7 20:31

请问楼主什么叫转置...不说清规则怎么帮你呢?
作者: cobinzhang    时间: 2014-5-7 21:09

回复 2# CrLf
转置就是 ,比如  1  2   3
                        4   5   6
                        7   8    9     
转成            1  4   7
                   2  5   8
                  3   6   9
作者: cobinzhang    时间: 2014-5-7 21:17

回复 2# CrLf

坛子里搜了一下,有位仁兄写了这个批处理
http://www.bathome.net/thread-10273-1-1.html
我运行了一下,中间两列数据转置后就丢失了一大半
作者: CrLf    时间: 2014-5-8 17:19

本帖最后由 CrLf 于 2014-5-8 17:32 编辑
  1. @echo off
  2. set x=0
  3. rd /s /q 测试&md 测试
  4. for %%a in (*.txt) do (
  5. setlocal enabledelayedexpansion
  6. (for /f "delims=" %%b in (%%~sa) do (
  7. set /a y=0,x+=1
  8. for %%c in (%%b) do (
  9. set /a y+=1
  10. set "_!x!_!y!=%%c"
  11. )
  12. )
  13. set /a x'=x-1
  14. for /l %%b in (1 1 !y!) do (
  15. for /l %%c in (1 1 !x'!) do (
  16. set /p"=!_%%c_%%b! "
  17. )
  18. for %%c in (!x!) do echo;!_%%c_%%b!
  19. ))<nul >测试\%%a
  20. endlocal
  21. )
  22. pause
复制代码

作者: CrLf    时间: 2014-5-8 17:32

如果文件大的话,这样更快:
  1. @echo off
  2. rd /s /q 测试&md 测试
  3. for /l %%a in (1 1 5) do call :getY %%a
  4. pause&exit/b
  5. :getY
  6. for %%a in (*.txt) do (
  7. for /f "tokens=%1" %%b in (%%~sa) do set /p"=%%b "
  8. echo;
  9. )<nul >>测试\%%a
复制代码

作者: PowerShell    时间: 2014-5-8 18:02

用excel的复制粘贴即可实现转置。
安全可靠+快速。
自动的话,宏,excel插件,vbs,powershell都可以。
我记得前几天坛子里有个家伙说精通vba,问问他。。。
作者: cobinzhang    时间: 2014-5-15 11:41

回复 5# CrLf


    版主,用这个代码处理文档为什么速度会越来越慢?好几个小时只处理了几天个,到后来处理每个文档所花时间越来越多




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