首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

高分VB.NET提取TXT文档指定内容

2013-08-26 
高分求助:VB.NET提取TXT文档指定内容!本帖最后由 han208 于 2011-04-19 16:07:21 编辑

高分求助: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出去。

热点排行