Board logo

标题: [文本处理] [分享]超过52列文本提取 [打印本页]

作者: /zhqsystem/zhq    时间: 2016-10-13 21:15     标题: [分享]超过52列文本提取

前言:群内很多人都需要文本分列,发到论坛更有助于其他坛友来处理一些简单的文本,代码简单如果有助于学习请点赞,无用留个代码垃圾
注:不可超过set设定最大数值不可用于特殊字符处理特殊字符
  1. @echo off&setlocal enabledelayedexpansion
  2. set a=值或for内引用
  3. rem:循环次数
  4. for /l %%n in (1,1,4196)do (
  5. rem:分隔符不受引号影响比for无参数分裂更有优势
  6. for /f "tokens=1,* delims=;" %%i in ("!a!")do (
  7.   rem:设置循环变量
  8.   set "a=%%j"
  9.   rem:最终值
  10.   echo,%%i
  11. )
  12. )
  13. pause
复制代码

作者: taofan712    时间: 2017-2-27 17:35

  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3. call :loop "%%a"
  4. )
  5. pause
  6. :loop
  7. for /f "tokens=1* delims=\;-[])( " %%i in ("%~1") do (
  8. if not "%%j"=="" (
  9. call :loop "%%j"
  10. ) else (
  11. echo;%%i
  12. )
  13. )
  14. goto :eof
复制代码
请问下,楼主为什么指定4196,有特别含义吗,如果已经满足条件了还是会一直循环4196次?
作者: 回家路上    时间: 2017-2-27 18:02

所以,差不多吧
http://www.bathome.net/thread-5548-1-2.html
作者: /zhqsystem/zhq    时间: 2017-2-27 20:05

本帖最后由 /zhqsystem/zhq 于 2017-2-27 20:16 编辑

回复 2# taofan712
set受字符数限制8192,8192/2=4096,最大支持列为4096,没有别的含义,
执行是执行了剩余的所有for,但是由于变量被替换了空值,导致for为空无意义被自动过滤,可以序列for可以加入一个判断循环变量存在执行后边的,
if defined a for /f....
作者: GNU    时间: 2017-2-28 09:23

http://bbs.bathome.net/thread-5548-1-1.html#pid35781
能否讲解一下跟这个代码相比有什么优势和劣势?
作者: /zhqsystem/zhq    时间: 2017-2-28 21:53

回复 5# GNU
和这个比没有优势,只是少占用了SET序列化和死循环,%%n的值属于固定值而且是固定列,xls数据需要替换分割符"TABTAB=tab tab"两次才能对其进行实际的简单操作,醉了没做过练习题,看来是发重了




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