中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何读取文本内<a>至<a/> 之间的字符串?
作者:
标题: [已解决]如何读取文本内<a>至<a/> 之间的字符串? 上一主题 | 下一主题
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『楼 主』:  [已解决]如何读取文本内<a>至<a/> 之间的字符串?

VBS以及批处理
如何读取文本内<a>至<a/> 之间的字符串?
两种皆可.谢谢
附件在下面
a.txt
感谢 flyinspace 兄提供的代码,遗憾就是不能准确读取 <a>至<a/> 之间的字符串.
namejm 斑竹也给出了代码,感谢 斑竹 感谢 flyinspace .



@echo off
:: 要求test.txt中的字符串不能出现空格,没有感叹号、引号

setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
    set "str=%%i"
    set "str=!str:<a>=☆!"
    if not "!str!"=="%%i" call :pickup
)

pause
exit
:pickup
for /f "tokens=1* delims=☆" %%i in ("%str%") do (

    set "var=%%i"
    set "str=%%j"
    set "var=!var:</a>=★!"
    if "!var!"=="%%i" (
        goto pickup
    ) else (
    set "var=!var:★=!"
        for /f %%x in ("!var!") do set/p= "%%x"<nul
    )
    if defined str goto pickup
echo.
)
goto :eof

[ Last edited by huzixuan on 2007-3-31 at 10:02 PM ]



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-3-30 02:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

搜索

   此帖被 +1 点积分     点击查看详情   
评分人:【 huzixuan 分数: +1  时间:2007-3-31 22:02


2007-3-30 04:51
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 3 楼』:  

搜索了一下,有很多.但却没发现我这样的情况
文本内容如下:

sa<a>1<a/>sadsa<a>1<a/>sadsa<a>1<a/>sadsa<a>1<a/>sad
da<a>2<a/>sad

位置不固定,我想用 tokens 提取部分都不知道 如何下手



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-3-30 08:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 4 楼』:  

两天之内如果我看到了你的回复。

就给你代码。
呵呵。花了我30分钟才搞定郁闷死了。

2007-3-30 15:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  

<a/>换成<a>然后split就完了

   此帖被 +1 点积分     点击查看详情   
评分人:【 huzixuan 分数: +1  时间:2007-3-31 22:02


2007-3-31 04:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 6 楼』:  

slore
好办法!

   此帖被 +1 点积分     点击查看详情   
评分人:【 huzixuan 分数: +1  时间:2007-3-31 22:02


2007-3-31 05:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 7 楼』:  

饿,你好 flyinspace 兄,我回复了.
你在吗?
谢谢帖上代码,感谢

[ Last edited by huzixuan on 2007-3-31 at 07:50 AM ]



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-3-31 06:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 8 楼』:  

@echo off & SETLOCAL EnableDelayedExpansion

set _TxtFile=1.txt
set _OutFile=2.txt
set _GetLine=init
set _GetChar=init

:main
        for /f "Tokens=* " %%i in (%_TxtFile%) do (
                set _GetLine=%%i
                call :READINFILE
                echo ^<!_OutLine!^>
                )
goto :END
:READINFILE
set ReadFlag=true
        for /l %%i in (0,1,255) do (
                set _GetChar=!_GetLine:~%%i,1!
                if "!_GetChar!"=="" goto :EOF
                if "!_GetChar!"=="<" set ReadFlag=false
                if "!ReadFlag!"=="true" set _OutLine=!_OutLine!!_GetChar!
                if "!_GetChar!"==">" set ReadFlag=true

                )
        goto :EOF
:END

pause

   此帖被 +4 点积分        点击查看详情   
评分人:【 huzixuan 分数: +4  时间:2007-3-31 22:01


2007-3-31 08:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 9 楼』:  

代码不是不可以给出里面的读数。。

只是因为你的要求简单。。

要不。代码会更复杂的。



知,不觉多。不知,乃求知
2007-4-1 07:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tclgb
初级用户

小子



积分 76
发帖 26
注册 2007-6-20
状态 离线
『第 10 楼』:  

综合各位兄弟的思想,我对代码进行了一些改变,不受!&"等字符的限制
@echo off & SETLOCAL EnableDelayedExpansion

set _TxtFile=a.txt
set _OutFile=2.txt
set _GetLine=
set _GetChar=

:main
        if exist %_OutFile% copy %_OutFile% %_OutFile%.bak & del /q /f %_OutFile%
        fsutil file Createnew %_OutFile% 0
        for /f "Tokens=* " %%i in (%_TxtFile%) do (
                set "_GetLine=%%i"
                set "_OutLine="
                set "_GetLine=!_GetLine:<a>=☆!"
                set "_GetLine=!_GetLine:<a/>=★!"
                call :READINFILE
                echo !_OutLine! >>%_OutFile%
                )
goto :END
:READINFILE
set ReadFlag=false
        for /l %%i in (0,1,255) do (
                set _GetChar=!_GetLine:~%%i,1!
                if "!_GetChar!"=="" goto :EOF
                if "!_GetChar!"=="★" set ReadFlag=false
                if "!ReadFlag!"=="true" set _OutLine=!_OutLine!!_GetChar!
                if "!_GetChar!"=="☆" set ReadFlag=true
                )
        goto :EOF
:END
[ Last edited by tclgb on 2007-7-13 at 01:11 AM ]

2007-7-8 02:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: