高分求助:VB.NET提取TXT文档指定内容!
本帖最后由 han208 于 2011-04-19 16:07:21 编辑 ==================================================
Sat Feb 12, 16:45 CST-0800 2011 (OK)
--------------------------------------------------
CELLPAG: 'D51179C'
Number Value Name
1 32 PAGPCHCONG
2 524 PAGETOOOLD
--------------------------------------------------
Sat Feb 12, 16:45 CST-0800 2011 (OK)
--------------------------------------------------
CELLPAG: 'D5143A'
Number Value Name
1 64 PAGPCHCONG
2 537 PAGETOOOLD
--------------------------------------------------
Sat Feb 12, 16:45 CST-0800 2011 (OK)
--------------------------------------------------
CELLPAG: '516A'
Number Value Name
1 75 PAGPCHCONG
2 3677 PAGETOOOLD
--------------------------------------------------
各位大侠,以上是我要处理的TXT文档里面的内容,需要提取的数据有''里面的字符串,Value对应的数值,和Name对应的字符串。''里面的字符串不固定长度。提取后放到另外的TXT文档里面。希望能大侠能用VB.NET实现,谢谢啦!!!
存取时要弄成的格式为:
CELLPAG PAGPCHCONG PAGETOOOLD
D51179C 32 524
D5143A 64 537
516A 75 3677
[解决办法]
有vs2008写了一个:
Dim szTem, szCode As String
szTem = My.Computer.FileSystem.ReadAllText("d:\mydata.txt")
Dim pos As Integer = 0
Dim pos1 As Integer = 0
Dim myFile As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter("f:\mywriter.txt", False)
myFile.WriteLine("CELLPAG PAGPCHCONG PAGETOOOLD")
pos = szTem.IndexOf("CELLPAG")
While pos <> -1
pos1 = szTem.IndexOf("'", pos + 10)
szCode = szTem.Remove(pos1)
szCode = szCode.Remove(0, pos + 10)
myFile.Write(szCode)
pos = szTem.IndexOf("Name", pos1)
pos1 = szTem.IndexOf("PAGPCHCONG", pos + 8)
szCode = szTem.Remove(pos1 - 1)
szCode = szCode.Remove(0, pos + 10)
myFile.Write(" " + szCode)
pos = szTem.IndexOf("PAGETOOOLD", pos1)
szCode = szTem.Remove(pos - 1)
szCode = szCode.Remove(0, pos1 + 16)
myFile.Write(" " + szCode + Chr(13) + Chr(10))
pos = szTem.IndexOf("CELLPAG", pos)
End While
myFile.Close()
[解决办法]
Dim FS1 As FileStream = New FileStream("d:\Test1.txt", FileMode.Open, FileAccess.Read)
Dim FS2 As FileStream = New FileStream("d:\Test2.txt", FileMode.Create, FileAccess.Write)
Dim FRead As StreamReader = New StreamReader(FS1)
Dim FWrite As StreamWriter = New StreamWriter(FS2)
Dim StrBuild As StringBuilder = New StringBuilder("CELLPAG PAGPCHCONG PAGETOOOLD")
StrBuild.AppendLine()
While Not FRead.EndOfStream
Dim sTemp As String = Trim(FRead.ReadLine)
If InStr(sTemp, "CELLPAG") Then
StrBuild.Append(Mid(sTemp, 11, 4))
End If
If Mid(sTemp, 1, 1) = "1" Then
StrBuild.Append(Space(8) & Mid(sTemp, 3, 2))
End If
If Mid(sTemp, 1, 1) = "2" Then
StrBuild.AppendLine(Space(8) & Mid(sTemp, 3, 3))
End If
End While
FWrite.WriteLine(StrBuild.ToString)
FRead.Close()
FS1.Close()
FWrite.Close()
FS2.Close()
------解决方案--------------------
Dim txtLines As String() = File.ReadAllLines("C:\test.txt", System.Text.UnicodeEncoding.GetEncoding("gb2312"))
Using fw As New StreamWriter("C:\OutFile.txt", False, System.Text.UnicodeEncoding.GetEncoding("gb2312"))
Dim CELLPAG As String = ""
Dim PAGPCHCONG As String = ""
Dim PAGETOOOLD As String = ""
Dim tmp As String = ""
fw.WriteLine("CELLPAG PAGPCHCONG PAGETOOOLD")
fw.Flush()
For i As Integer = 0 To UBound(txtLines)
If String.IsNullOrEmpty(txtLines(i).Trim) Then
Continue For
End If
If InStr(txtLines(i), "CELLPAG") <> 0 Then
CELLPAG = txtLines(i).Substring(txtLines(i).IndexOf("'"))
CELLPAG = CELLPAG.Replace("'", "")
End If
If InStr(txtLines(i), "Number") <> 0 Then
tmp = txtLines(i + 1).Trim
tmp = tmp.Substring(tmp.IndexOf(" ") + 1, tmp.IndexOf(" ", tmp.IndexOf(" ") + 1) - 1)
PAGPCHCONG = tmp.Trim
tmp = txtLines(i + 2).Trim
tmp = tmp.Substring(tmp.IndexOf(" ") + 1, tmp.IndexOf(" ", tmp.IndexOf(" ") + 1) - 1)
PAGETOOOLD = tmp.Trim
fw.WriteLine(CELLPAG & " " & PAGPCHCONG & " " & PAGETOOOLD)
fw.Flush()
End If
Next
Erase txtLines
fw.Close()
End Using
[解决办法]
dim FS as filestream.streamreader = (txtpath)
dim strTmp as string
dim RestoreArry(,) as string
restorearry(0,0)="CELLPAG"
restorearry(0,1)="PAGPCHCONG"
restorearry(0,2)="PAGETOOOLD"
strTmp=trim(streamreader.readline)
if system.text.left(strtmp,7)="CELLPAG" then
system.text.replace(strtmp,"CELLPAG:","")
restorearry(1,0)=strtmp
end if
if system.text.right(strtmp,10)="PAGPCHCONG" then
strtmp=system.text.replace(strtmp,"1 ","")
strtmp=rtrim(system.text.replace(strtmp,"PAGPCHCONG",""))
restorearry(1,1)=strtmp
end if
if system.text.right(strtmp,10)="PAGETOOOLD" then
strtmp=system.text.replace(strtmp,"2 ","")
strtmp=rtrim(system.text.replace(strtmp,"PAGETOOOLD",""))
restorearry(1,2)=strtmp
end if
加上 一直读到EOF的代码,需要的东西就存在数组里了,按顺序取出来,再writealine出去。