Board logo

标题: [文本处理] [已解决]批处理如何截取字符串到一个数组 [打印本页]

作者: yeefyun    时间: 2009-7-8 22:45     标题: [已解决]批处理如何截取字符串到一个数组

::abc.txt 内容:
::{patch$:|0135545454|1||ntest|F0Ouuewhuwe|RegA|
::{ntest$:|{2154545445|090706191310|30||||090707191340|1|}}}

请哪位高手写个批处理 将文件里内容读出并以 "|" 作为分割符将字段读取到一个数组里
比如:
|1| |ntest|12|bc| |这行

str1=1
str2=""
str3=ntest
str4=12
str5=bc
str6=""

相当于vb.net里的trim函数功能(注意的是如果两个||是空的,空字符也要取)

[ 本帖最后由 yeefyun 于 2009-7-9 22:55 编辑 ]
作者: namejm    时间: 2009-7-8 22:52

  请不要直接给出大段的代码,没有多少人有这个耐心把你发的代码都认真地看完的,请直接用文字描述你的问题,包括问题产生的背景,并更新到顶楼——提问不是一件随意的事情,里面也包含了不少技巧。
作者: terse    时间: 2009-7-10 00:36

这样行不?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (tx.txt) do (
  3.     set n=0
  4.     set "str=%%i"
  5.     set "str=!str:|=■|!"
  6.     if "!str:~,1!"=="■" set "str=!str:~1!"
  7.     call:lp "!str!"
  8.     for /l %%a in (1 1 !n!) do if "!str%%a!"=="" (echo str%%a: "")else echo str%%a: !str%%a!
  9. )
  10. pause&exit
  11. :lp
  12.        for /f "tokens=1* delims=|" %%i in (%1) do (
  13.        set/a n+=1
  14.        set "str=%%i"
  15.        set "str=!str:■=!"
  16.        set "str!n!=!str!"
  17.        if not "%%j"=="" call:lp "%%j"
  18. )
复制代码
不能处理空格
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (tx.txt) do (
  3.     set n=0
  4.     set "str=%%i"
  5.     set "str=!str:|=| !"
  6.     if "!str:~,1!"=="|" set "str=!str:~1!"
  7.        for %%a in (!str!) do (
  8.        set/a n+=1
  9.        set "str=%%a"
  10.        if "!str:|=!"=="" (set "str!n!=""")else set "str!n!=!str:|=!"
  11.     )
  12.    for /l %%a in (1 1 !n!) do for %%b in (!str%%a!) do echo str%%a: %%b
  13. )
  14. pause
复制代码

作者: yeefyun    时间: 2009-7-13 22:45     标题: [已解决]

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (tx.txt) do (
  3.     set n=0
  4.     set "str=%%i"
  5.     set "str=!str:|=| !"
  6.     if "!str:~,1!"=="|" set "str=!str:~1!"
  7.        for %%a in (!str!) do (
  8.        set/a n+=1
  9.        set "str=%%a"
  10.        if "!str:|=!"=="" (set "str!n!=""")else set "str!n!=!str:|=!"
  11.     )
  12.    for /l %%a in (1 1 !n!) do for %%b in (!str%%a!) do echo str%%a: %%b
  13. )
  14. pause
复制代码
正解




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