Board logo

标题: 关于提取文本内容(新手求助)~~ [打印本页]

作者: rtsp0815     时间: 2009-2-19 13:41    标题: 关于提取文本内容(新手求助)~~
如有以下文本内容: dn:1 ---------------------------- name:y type:6x17 port:36 lantx:3 host 3 1 1 3 ---------------------------- dn:2 ---------------------------- name:undef type:undef ---------------------------- dn:3 ---------------------------- name:y tyep:6x17 port:29 lantx:3 host 3 2 1 4 ----------------------------- 怎么能得到以下输出: dn:1 3 1 1 3 dn:3 3 2 1 4 请高手指教,不胜感激

作者: rtsp0815     时间: 2009-2-19 13:42
因需处理数据量较大,在线等待中。。。

作者: moniuming     时间: 2009-2-19 14:23
@echo off
Setlocal Enabledelayedexpansion
for /f "tokens=1,2,*" %%i in ('more +13^<%~fs0') do (
  set var=%%i
  if "!var:~,2!"=="dn" (
    set str=%%i
  ) else (
    if "!var:~,5!"=="lantx" (
      echo !str! %%k
    )
  )
)
pause&goto :eof
dn:1
----------------------------
name:y
type:6x17  port:36
lantx:3  host 3 1 1 3
----------------------------
dn:2
----------------------------
name:undef
type:undef
----------------------------
dn:3
----------------------------
name:y
tyep:6x17    port:29
lantx:3    host 3 2 1 4
-----------------------------

作者: rtsp0815     时间: 2009-2-19 15:09
楼上的我测试过,能行,但是我是想从这个文件中提取出来另外生成一个文件

作者: rtsp0815     时间: 2009-2-19 15:11
相当于文件1.txt里面是以下内容: dn:1 ---------------------------- name:y type:6x17 port:36 lantx:3 host 3 1 1 3 ---------------------------- dn:2 ---------------------------- name:undef type:undef ---------------------------- dn:3 ---------------------------- name:y tyep:6x17 port:29 lantx:3 host 3 2 1 4 ----------------------------- 处理后的文件2.txt内容为: dn:1 3 1 1 3 dn:3 3 2 1 4

作者: tireless     时间: 2009-2-19 15:32
@echo off
setlocal enabledelayedexpansion
(
  for /f "eol=- tokens=1,2,* delims=t" %%a in (1.txt) do (
    if "%%a" lss "e" (
      set dn=%%a
    ) else (
      if "%%a" lss "m" echo !dn!%%c
    )
  )
)>2.txt
[ Last edited by tireless on 2009-2-19 at 15:37 ]

作者: moniuming     时间: 2009-2-19 15:32
其实自己改一改就行了...
@echo off
type nul>2.txt
Setlocal Enabledelayedexpansion
for /f "tokens=1,2,*" %%i in ('type 1.txt') do (
  set var=%%i
  if "!var:~,2!"=="dn" (
    set str=%%i
  ) else (
    if "!var:~,5!"=="lantx" (
      echo !str! %%k
    )
  )
)>>2.txt
start 2.txt

作者: rtsp0815     时间: 2009-2-22 16:57
请问有人能逐行解释一下上面的批命令吗?

作者: rtsp0815     时间: 2009-2-22 16:59
还有就是如果1.txt的内容变为: dn:1 ---------------------------- name:y type:6x17 port:36 lantx at:3 host 3 1 1 3 lantx ut:std ---------------------------- dn:2 ---------------------------- name:undef type:undef ---------------------------- dn:3 ---------------------------- name:y tyep:6x17 port:29 lantx at:3 host 3 2 1 4 lantx ut:std ---------------------------- 又该怎么处理呢? 谢谢~~

作者: HAT     时间: 2009-2-22 17:33    标题: Re 8楼
哪句不懂,就问哪句,有很多热心人会告诉你答案;如果全部不懂,建议先去学习基础教程,这样才能更快的掌握批处理。

作者: rtsp0815     时间: 2009-2-22 18:19
呵呵,不好意思,其实主要是这个if "!var:~,2!"=="dn" 不知道是什么意思

作者: HAT     时间: 2009-2-22 21:01    标题: Re 11楼
参考:理解变量字符的截取功能 www.cn-dos.net/forum ...

作者: rtsp0815     时间: 2009-2-22 22:25
看明白了,谢谢斑竹

作者: HAT     时间: 2009-2-22 22:39    标题: Re 13楼
如果有人帮你解决了问题,建议进行以下操作: 1、修改帖子标题,在标题最前面注明:[已结] 2、给正确回答问题者加分(你自己的积分不会减少)以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。 3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。