[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理字符串分割及处理

刚接触批处理大概一个星期,遇到一个棘手问题,多方查询无头绪。
求解诸位。
问题:
一txt文件a.txt,其有未知行数,每一行都有逗号分隔,逗号个数是一致的,但逗号数是未知的,每一列的字符长度也是未定的,假设内容如下:
aab,baaa,bbbb,aaa,abbba,aab
baa,baaa,aaa,bbb,aab,bbaba
我现在需要读取这个文件,并且重新把它的内容修改后写入另一文件b.txt
修改的规则是: 依照逗号分割每行内容,分割后的每一段字符串判断其首尾是否含有b,不管首尾(中间的不算),只要含有一个就把该字符串加上引号 拿第一行做例子,第一个字符串 aab---->"aab" 。 第二个 baaa-->"baaa"。第三个 bbbb----->"bbbb"。第四个则不变 aaa-->aaa. 第五个也不变 abbba----->abbba 第六个 aab--->"aab"
各位大侠看看如何实现,若是能给出完整代码,万分感谢。

======================================2009/06/30==============
问题已被随风解决。

[ 本帖最后由 huaxn 于 2009-6-30 10:48 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

用第三方工具会快得多...
  1. @echo off
  2. Setlocal Enabledelayedexpansion
  3. set "src_fl=a.txt"
  4. set "dst_fl=b.txt"
  5. type nul>"%dst_fl%"
  6. for /f "delims=" %%a in (%src_fl%) do (
  7.    call :lp "%%a"
  8.    >>"%dst_fl%" echo.
  9. )
  10. start "" "%dst_fl%"
  11. goto :eof
  12. :lp
  13. for /f "delims=, tokens=1,*" %%i in ("%~1") do (
  14.    set "var=%%i"
  15.    if "!var:~,1!"=="b" (
  16.       >>"%dst_fl%" set /p=""!var!""<nul
  17.       >>"%dst_fl%" set /p=,<nul
  18.    ) else (
  19.       if "!var:~-1!"=="b" (
  20.          >>"%dst_fl%" set /p=""!var!""<nul
  21.          >>"%dst_fl%" set /p=,<nul
  22.       ) else (
  23.          >>"%dst_fl%" set /p=!var!,<nul
  24.       )
  25.    )
  26.    call :lp "%%j"
  27. )
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "eol= delims=" %%a in (a.txt) do (
  3.    set str=%%a&set "var="
  4.    set str="!str:,=" "!"
  5.    for %%i in (!str!) do (
  6.       set num=%%~i&set "flag="
  7.       if "!num:~0,1!"=="b" set flag=a
  8.       if "!num:~-1!"=="b" set flag=a
  9.       if defined flag (set var=!var!,%%i) else set var=!var!,%%~i
  10.     )
  11.     echo !var:~1!
  12. )
  13. pause
复制代码
技术问题请到论坛发帖求助!

TOP

随风好精髓
我也想到你这个思路
if "!num:~0,1!"=="b" set flag=a
if "!num:~-1!"=="b" set flag=a
可惜我没想到用flag, 我仔细研究下先,初期接触,读起代码也是吃力的,特别是你那几句带括号的。
另2楼同志:我写的这个东西需要简单通用,第三方组件不打算使用的,谢谢你。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.txt) do (
  4.         for %%a in (%%i) do (
  5.                 set var=%%a
  6.                 if "!var:~0,1!" == "b" set var="%%a"
  7.                 if "!var:~-1!" == "b" set var="%%a"
  8.                 set m=!m!,!var!
  9.         )
  10.         echo !m:~1!
  11.         set m=
  12. )
  13. pause
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "eol= delims=" %%a in (a.txt) do (
  3.   set "str=" & set var=%%a
  4.   for %%a in ("!var:,=" "!") do (
  5.     set var=%%~a
  6.     set var=!var:~,1!!var:~-1!
  7.     if "!var:b=!" neq "!var!" (set str=!str!,%%a) else set str=!str!,%%~a
  8.   )
  9.   echo !str:~1!
  10. )
  11. pause
复制代码

[ 本帖最后由 tireless 于 2009-6-30 17:27 编辑 ]

TOP

返回列表