一个txt文件 里面有很多类似的重复内容比如
1.txt内容为
固定格式为收入资料:本月个人收入:400
本月津贴:100
本月结算:500收入资料:本月个人收入:400
本月津贴:100
本月结算:500收入资料:本月个人收入:400
本月津贴:110
本月结算:510收入资料:本月个人收入:400
本月津贴:110
本月结算:510这样的 每次可能会有重复写入的情况 我想最后把结果过滤一下 把重复的内容全部自动替换掉 可以么?比如以上内容替换后应该是:收入资料:本月个人收入:400
本月津贴:100
本月结算:500收入资料:本月个人收入:400
本月津贴:110
本月结算:510

解决方案 »

  1.   

    sorry,没看清楚,每段开头都是“收入资料:”?,那就好办了
      

  2.   

    Dim str1 As String
    Open "c:\test.txt" For Input As 1
    str1 = StrConv(InputB$(LOF(1), 1), vbUnicode)
    Close 1Dim astr() As String
    astr = Split(str1, "收入资料:")'分割到数组'另外建一个动态数组
    '循环遍历数组astr,处理每一个元素,如果有内容,判断是否与前一个相等;
    如果相等,忽略,不想等,在新动态数组增加一个元素
      

  3.   

    新数组用join函数连接为一个字符串,再Print到文件,就可以了
      

  4.   

    急就章,最原始办法,现写的,参考下
    Private Sub Command1_Click()
    Dim strArr() As String
    Dim Temp(3) As String
    Dim strTemp As String
    Dim strTemp1 As String
    Dim arrCount As Long
    Dim I As Long
    Dim J As Long
    Dim Answer As BooleanarrCount = 0
    Open "d:\1.txt" For Input As #1
    While Not EOF(1)
        Line Input #1, strTemp
        If strTemp = "收入资料:" Then arrCount = arrCount + 1
    Wend
    Close #1
    ReDim strArr(3, arrCount)
    Open "d:\1.txt" For Input As #2
    Line Input #2, strTemp
    Line Input #2, strTemp1
    If strTemp = "收入资料:" And strTemp1 = Empty Then
        Line Input #2, strArr(0, 0)
        Line Input #2, strArr(1, 0)
        Line Input #2, strArr(2, 0)
        Line Input #2, strTemp
    End If
    I = 1
    While Not EOF(2)
        Answer = False
        Line Input #2, strTemp
        Line Input #2, strTemp1
        If strTemp = "收入资料:" And strTemp1 = Empty Then
            Line Input #2, Temp(0)
            Line Input #2, Temp(1)
            Line Input #2, Temp(2)
            Line Input #2, strTemp
            For J = 0 To I - 1
                If Temp(0) = strArr(0, J) And Temp(1) = strArr(1, J) And Temp(2) = strArr(2, J) Then
                     Answer = True
                End If
            Next J
            If Answer = False Then
                strArr(0, I) = Temp(0)
                strArr(1, I) = Temp(1)
                strArr(2, I) = Temp(2)
                I = I + 1
            End If
        End If
    Wend
    Close #2
    Next J
    End Sub
    把strarr()写到文件就好了,记得是从0到I-1
      

  5.   

    错误 /只有next 没有 for
      

  6.   

    Option Base 0
    Private Type gz '定义一个结构体,其中有三个字段
        a(1 To 3) As Single
    End Type
    Private Sub Command1_Click()
        Dim x$(4), a() As gz, n%, i%, j%, t As gz
        Open "c:\test.txt" For Input As #1
        Do Until EOF(1)
            n = n + 1
            ReDim Preserve a(n) '重定义动态数组,类型为自定义类型
            Line Input #1, x(1) '依次读取四行内容,这里我的测试文件中没有空行,如果有空行,再加上读空行的语句即可
            Line Input #1, x(2)
            a(n).a(1) = Right(x(2), 3) '将需要的数据取出来赋给结构体
            Line Input #1, x(3)
            a(n).a(2) = Right(x(3), 3)
            Line Input #1, x(4)
            a(n).a(3) = Right(x(4), 3)
        Loop
        Close
        For i = 1 To n - 1 '排序,将相同的记录放在一起,以方便过滤相同记录
            For j = i + 1 To n
                If a(i).a(3) > a(j).a(3) Then
                    t = a(i): a(i) = a(j): a(j) = t
                End If
            Next j
        Next i
        Open "c:\test1.txt" For Output As #1
        For i = 1 To n
            If a(i).a(1) & a(i).a(2) & a(i).a(3) <> a(i - 1).a(1) & a(i - 1).a(2) & a(i - 1).a(3) Then '如果当前三个数据串成一个字符串,与前一条记录的不同,则写入文件,注意我这里的数组从0开始的,可以保证第一条记录可以写入
                Print #1, "收入资料:"
                Print #1, "本月个人收入:" & a(i).a(1)
                Print #1, "本月津贴:" & a(i).a(2)
                Print #1, "本月结算:" & a(i).a(3)
            End If
        Next i
        Close
        MsgBox "ok"
    End Sub