标题: [文本处理] [已解决]批处理字符串分割及处理 [打印本页]
作者: huaxn 时间: 2009-6-29 23:19 标题: [已解决]批处理字符串分割及处理
刚接触批处理大概一个星期,遇到一个棘手问题,多方查询无头绪。
求解诸位。
问题:
一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 编辑 ]
作者: more 时间: 2009-6-30 00:40
用第三方工具会快得多...- @echo off
- Setlocal Enabledelayedexpansion
- set "src_fl=a.txt"
- set "dst_fl=b.txt"
- type nul>"%dst_fl%"
- for /f "delims=" %%a in (%src_fl%) do (
- call :lp "%%a"
- >>"%dst_fl%" echo.
- )
- start "" "%dst_fl%"
- goto :eof
- :lp
- for /f "delims=, tokens=1,*" %%i in ("%~1") do (
- set "var=%%i"
- if "!var:~,1!"=="b" (
- >>"%dst_fl%" set /p=""!var!""<nul
- >>"%dst_fl%" set /p=,<nul
- ) else (
- if "!var:~-1!"=="b" (
- >>"%dst_fl%" set /p=""!var!""<nul
- >>"%dst_fl%" set /p=,<nul
- ) else (
- >>"%dst_fl%" set /p=!var!,<nul
- )
- )
- call :lp "%%j"
- )
复制代码
作者: 随风 时间: 2009-6-30 03:45
- @echo off&setlocal enabledelayedexpansion
- for /f "eol= delims=" %%a in (a.txt) do (
- set str=%%a&set "var="
- set str="!str:,=" "!"
- for %%i in (!str!) do (
- set num=%%~i&set "flag="
- if "!num:~0,1!"=="b" set flag=a
- if "!num:~-1!"=="b" set flag=a
- if defined flag (set var=!var!,%%i) else set var=!var!,%%~i
- )
- echo !var:~1!
- )
- pause
复制代码
作者: huaxn 时间: 2009-6-30 10:16
随风好精髓
我也想到你这个思路
if "!num:~0,1!"=="b" set flag=a
if "!num:~-1!"=="b" set flag=a
可惜我没想到用flag, 我仔细研究下先,初期接触,读起代码也是吃力的,特别是你那几句带括号的。
另2楼同志:我写的这个东西需要简单通用,第三方组件不打算使用的,谢谢你。
作者: jmz573515 时间: 2009-6-30 10:31
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- for %%a in (%%i) do (
- set var=%%a
- if "!var:~0,1!" == "b" set var="%%a"
- if "!var:~-1!" == "b" set var="%%a"
- set m=!m!,!var!
- )
- echo !m:~1!
- set m=
- )
- pause
复制代码
作者: tireless 时间: 2009-6-30 17:24
- @echo off&setlocal enabledelayedexpansion
- for /f "eol= delims=" %%a in (a.txt) do (
- set "str=" & set var=%%a
- for %%a in ("!var:,=" "!") do (
- set var=%%~a
- set var=!var:~,1!!var:~-1!
- if "!var:b=!" neq "!var!" (set str=!str!,%%a) else set str=!str!,%%~a
- )
- echo !str:~1!
- )
- pause
复制代码
[ 本帖最后由 tireless 于 2009-6-30 17:27 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |