中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 20:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何读取文本内<a>至<a/> 之间的字符串?
楼 主 [已解决]如何读取文本内<a>至<a/> 之间的字符串? 发表于 2007-03-30 02:41 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
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 ]
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
2 发表于 2007-03-30 04:51 ·  中国 甘肃 平凉 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
搜索
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +1 2007-03-31 22:02
3 发表于 2007-03-30 08:12 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
搜索了一下,有很多.但却没发现我这样的情况
文本内容如下:

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

位置不固定,我想用 tokens 提取部分都不知道 如何下手
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
4 发表于 2007-03-30 15:02 ·  中国 广东 广州 海珠区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
两天之内如果我看到了你的回复。

就给你代码。
呵呵。花了我30分钟才搞定郁闷死了。
5 发表于 2007-03-31 04:33 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
UID 79003
性别 男
状态 离线
<a/>换成<a>然后split就完了
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +1 2007-03-31 22:02
6 发表于 2007-03-31 05:35 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
UID 73417
性别 男
状态 离线
slore
好办法!
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +1 2007-03-31 22:02
7 发表于 2007-03-31 06:36 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
UID 69036
性别 男
来自 芜湖
状态 离线
饿,你好 flyinspace 兄,我回复了.
你在吗?
谢谢帖上代码,感谢

[ Last edited by huzixuan on 2007-3-31 at 07:50 AM ]
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
8 发表于 2007-03-31 08:42 ·  中国 广东 广州 联通
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +4 2007-03-31 22:01
9 发表于 2007-04-01 07:39 ·  中国 广东 广州 荔湾区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
代码不是不可以给出里面的读数。。

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

要不。代码会更复杂的。
知,不觉多。不知,乃求知
10 发表于 2007-07-08 02:39 ·  中国 湖北 武汉 电信
初级用户
小子
积分 76
发帖 26
注册 2007-06-20 19:30
UID 91913
性别 男
状态 离线
综合各位兄弟的思想,我对代码进行了一些改变,不受!&"等字符的限制


@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 ]
论坛跳转: