标题: [文本处理] [已解决]批处理如何截取网页中固定内容到新的文本?谢谢。 [打印本页]
作者: hijackle 时间: 2012-12-28 08:09 标题: [已解决]批处理如何截取网页中固定内容到新的文本?谢谢。
如附件,如何获取网页中的“编码”“名称”“电话”“数量1”“数量2”“时间”“时长”“原因”的具体数值到新的文本中并自动换行,网页实际有多少行这样的数据未知也就是不止这个网页的只有4行
020033 分店1 13888888888(王大狗) 115 105 2012-12-28 06:12:52 0天0小时19分钟 异常
020042 分店2 1366666666、88999999 92 84 2012-11-21 12:11:17 24天3小时35分钟 盗版
020064 分店3 5555555\13000000000 0 0 2012-12-28 06:12:42 0天0小时17分钟 过低
020085 分店4 15333333333/444444444 63 56 2012-05-15 12:05:57 150天19小时21分钟 关闭
作者: batman 时间: 2012-12-28 22:30
本帖最后由 batman 于 2012-12-28 22:31 编辑
用vbs正则:- Dim FSO, redStr, Arr, vbStr
- Set FSO = CreateObject("Scripting.FileSystemObject")
- redStr = FSO.OpenTextFile("test.html").ReadAll
- Arr = Split(GetText(redStr), "分钟")
- For Each str In Arr
- str = Replace(str, vbCrLf, "")
- For Each var In Split(str, " ")
- If Replace(var, " ", "") <> "" Then
- If Mid(var,3,1) & Mid(var,6,1) = "::" Then var = Mid(var,1,8) & vbTab & Mid(var,9,Len(var))
- vbStr = vbStr & var & vbTab
- End If
- Next
- vbStr = Left(vbStr, Len(vbStr)-1) & "分钟" & vbCrLf
- Next
- FSO.OpenTextFile("new.txt", 2, True).Write Left(vbStr, Len(vbStr)-4)
- Set FSO = Nothing
- CreateObject("Wscript.Shell").Run "cmd /cstart new.txt", True, False
-
- Function GetText(String)
- Dim objExp
- Set objExp = New RegExp
- objExp.Global = True
- objExp.IgnoreCase = True
- objExp.Pattern = "<td>([^<>]+)<\/td>|\s|\S"
- objExp.Execute(String)
- GetText = objExp.Replace(String, "$1")
- End Function
复制代码
作者: batman 时间: 2012-12-28 22:56
再跟个简单的提取HTM(HTML)文件中文本的方法:- '提取当前目录下TEST.HTML文件中的文本内容
- Dim HTML, Path
- Path = CreateObject("Wscript.Shell").CurrentDirectory
- Set HTML = GetObject(Path & "\test.html", "HtmlFile")
- Do Until HTML.ReadyState = "complete" : WScript.Sleep 200 : Loop
- WScript.Echo HTML.DocumentElement.InnerText
复制代码
作者: batman 时间: 2012-12-29 00:26
本帖最后由 batman 于 2012-12-29 00:38 编辑
2楼的代码还有点问题,补上一个:- Dim HTML, Path, ReadStr
- Path = CreateObject("Wscript.Shell").CurrentDirectory & "\test.html"
- Set HTML = GetObject(Path, "HtmlFile")
- Do Until HTML.ReadyState = "complete" : WScript.Sleep 200 : Loop
- i = 0
- Do Until Err.Number <> 0
- On Error Resume Next
- str = ""
- str = Trim(HTML.GetElementsByTagName("td")(i).InnerText)
- If (i + 1) Mod 8 = 0 Then
- str = str & vbCrLf
- Else
- str = str & vbTab
- End If
- If str <> "" Then ReadStr = ReadStr & str : i = i + 1
- Loop
- CreateObject("Scripting.FileSystemObject").OpenTextFile("new.txt", 2, True).Write ReadStr
- CreateObject("Wscript.Shell").Run "cmd /cstart new.txt", False, False
复制代码
作者: terse 时间: 2012-12-29 00:44
用sed处理了一下 不过还要二次处理 不搞了- @echo off
- sed "s/^ *//;s/<td>/&\n/g;s/<\/td>/\n/g" "test.txt"|sed "/\(<span class=\|padding:\|^$\)/d"|sed -n "/<td>/{n;p}"
- pause
复制代码
作者: hijackle 时间: 2012-12-29 04:40
感谢版主和terse
作者: apang 时间: 2012-12-29 09:39
- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=*" %%a in (test.html) do (
- if /i "%%a"=="<td>" set flag=1
- if defined flag (
- set "str2=%%a"
- if /i "!str2!"=="</span>" set "str=!str!!str1!"
- if "!str2:</td><td>=!" neq "!str2!" (
- set "str=!str!!str1!"
- set "str=!str!!str2:</td><td>= !"
- )
- )
- if /i "%%a"=="</td>" echo,!str!&set "str="&set "flag="
- set "str1=%%a"
- ))>New.txt
- start "" New.txt
复制代码
作者: BAT-VBS 时间: 2012-12-29 10:25
回复 6# hijackle
问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
作者: terse 时间: 2012-12-29 15:04
练下手 换行问题解决 (不知标签 是否一致)- @echo off
- sed -n "s/<\/td><td>/ /g;/\(<span class=\|padding:\)/d;/<td>/,/<\/span>/p" test.htm|sed "s/^ *//;s/* $//;/<td>\|^$/d"|sed ":a;$!N;/[^<\/span>]/s/\n/ /;ta;s/<\/span>/\n/;P;D"
- PAUSE
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |