一般分三步。读文件到动态数组(一行对应一个元素)、修改数组指定元素(行)、将数组保存到文件FileLineSet为主函数,它可以将pFileName指定的文件的第pLine行修改为pString。(下列程序没有经过测试,仅仅表达一个意思。可能有错误。)Function FileLineSet(pFileName As String,pLine As Long,pString As String)
  Dim tAry() As String
  ReDim tAry(0)
  AryGetByFile pFileName,pAry()
  AryLineSet pAry(),pLine,pString
  AryPutToFile pFileName,pAry()
End Function1、读文件到动态数组(一行对应一个元素)
Function AryGetByFile(pFileName As String,pArray() As String)Dim tLoadStr As String
Dim tFileNumber As Integer
Dim tStart As LongtStart=0tFileNumber=FreeFileOpen pFileName For Input As #tFileNumber
  Do
    ReDim Preserve pArray(tStart)
    Line Input #tFileNumber,tLoadStr
    pArray(tStart)=tLoadStr
    tStart=tStart+1
  Loop Until EOF(tFileNumber)Close #tFileNumber
2、修改数组指定元素(行)Function AryLineSet(pAry() As String,pN As Long,pStr As String)
  Dim tAryLen As Long
  If pN<=tAryLen Then
    pArray(pN)=pStr
  End If
End Function3、将数组保存到文件Function AryPutToFile(pFileName As String,pAry() As String)
  Dim tFileNumber As Integer
  Dim tLoopEnd As Long
  tFileNumber=FreeFile
  tLoopEnd=UBound(pAry)
  Open pFileName For OutPut As #tFileNumber
    For tLoop=0 To tLoopEnd
      Print #tFileNumber,pAry(tLoop)
    Next
  Close #tFileNumber
End Function

解决方案 »

  1.   

    上述办法是最简单的办法,但不是最迅速的办法。将读文件的函数的
    pArray(tStart)=tLoadStr
    改为:
    pArray(tStart)=tLoadStr & Chr(13) & Chr(10)将修改行的函数的:
    pArray(pN)=pStr
    改为:
    pArray(pN)=pStr & Chr(13) & Chr(10)将写文件的函数改为:Function AryPutToFile(pFileName As String,pAry() As String)
    Dim tFileNumber As Integer
    tFileNumber=FreeFile
    Open pFileName For Binary As #tFileNumber
      Put #tFileNumber,1,pAry()
    Close #tFileNumber
    End Function这样做如果成功(没来得及测试),将使写文件速度快不止十倍。
      

  2.   

    文件指定行修改函数(菜刀法),作者:小仙妹(这个函数的灵感来自于小仙妹用菜刀切火腿肠,所以叫菜刀法)。具体原理是:将原文件用板儿菜砍成三段(当前行、当前行以前、当前行之后),将当前行扔到窗户外面去,然后将当前行以前、新当前行、当前行之后重新拼在一起。测试文件:SY.txt(SmallFairy的成员名单)01 小仙妹
    02 Wind
    03 虫虫
    04 风中花
    05 本·拉登
    06 小仙
    07 小松鼠
    08 凯蒂猫
    09 大水牛
    10 蓝眼镜
    11 呆头鸭
    12 吐鲁番测试语句:FileLineSetByStr "SY.txt", "05 Microsoft Windows 98SE", 5测试结果:~FileLineSet.txt
    01 小仙妹
    02 Wind
    03 虫虫
    04 风中花
    05 Microsoft Windows 98SE
    06 小仙
    07 小松鼠
    08 凯蒂猫
    09 大水牛
    10 蓝眼镜
    11 呆头鸭
    12 吐鲁番程序模块:
    Type tpFileText_LineInfo
      LineOn As Long
      LineEnd As Long
    End TypeFunction FileLineSetByStr(pFileName As String, pStr As String, pLine As Long)
      Dim tInfo As tpFileText_LineInfo
      Dim tFileNumber As Integer
      Dim tSurSize As Long
      Dim tDesSize As Long
      
      If FileSize("~FileLineSet.txt") Then
        Kill "~FileLineSet.txt"
      End If
      
      tSurSize = FileSize(pFileName)
      
      tInfo = FileLineAddGet(pFileName, pLine)
      
      CullFileByFile pFileName, "~FileLineSet.txt", 1, tInfo.LineOn - 1, 1
      
      tFileNumber = FreeFile
      
      Open "~FileLineSet.txt" For Append As #tFileNumber
        Print #tFileNumber, pStr
      Close #tFileNumber
      
      tDesSize = FileSize("~FileLineSet.txt")
      
      CullFileByFile pFileName, "~FileLineSet.txt", tInfo.LineEnd, tSurSize, tDesSize
      
    End FunctionFunction FileSize(pFileName As String) As Long
      Dim tFileNumber As Integer
      Dim tOutLng As Long
      tFileNumber = FreeFile
      Open pFileName For Binary As #tFileNumber
        tOutLng = LOF(tFileNumber)
      Close #tFileNumber
      FileSize = tOutLng
    End FunctionFunction CullFileByFile(pSurFileName As String, pDesFileName As String, pSurAddOn As Long, pSurAddEnd As Long, pDesAdd As Long)
      Dim tSegLong As Long
      Dim tSegAry() As Byte
      Dim tFileNumber As Integer
      tSegLong = pSurAddEnd - pSurAddOn
      ReDim tSegAry(tSegLong)
      tFileNumber = FreeFile
      Open pSurFileName For Binary As #tFileNumber
        Get #tFileNumber, pSurAddOn, tSegAry()
      Close #tFileNumber
      Open pDesFileName For Binary As #tFileNumber
        Put #tFileNumber, pDesAdd, tSegAry()
      Close #tFileNumber
    End FunctionFunction FileLineAddGet(pFileName As String, pLine As Long) As tpFileText_LineInfo
      Dim tFileNumber As Integer
      Dim tLoop As Long
      Dim tReadStr As String
      Dim tOutType As tpFileText_LineInfo
      Dim tOutLng As Long
      Dim tLine As Long
      tFileNumber = FreeFile
      tLine = pLine
      Open pFileName For Input As #tFileNumber
        For tLoop = 1 To tLine
          Line Input #tFileNumber, tReadStr
          tOutType.LineOn = tOutType.LineEnd + 1
          tOutType.LineEnd = Seek(tFileNumber) - 1
          If EOF(tFileNumber) Then
            If tLoop < tLine Then
              tOutLng = 0
            End If
            Exit For
          End If
        Next
      Close #tFileNumber
      FileLineAddGet = tOutType
    End Function