删除用TextStream.WriteLine()写的额外换行符

时间:2014-08-29 05:21:08

标签: vba

我有以下vba代码,它使用TextStream将ArrayList中的项目写入文件。

Sub WriteListAsCSV(list As Object, filePath As String)
    Dim fso As New FileSystemObject
    Dim ts As TextStream
    Set ts = fso.CreateTextFile(filePath, True)
    Dim line As Variant
    For Each line In list
        ts.WriteLine (line)
   Next line
   ts.Close
End Sub

问题是我在文件末尾有额外的换行符。

我可以这样做,但我不想在每个循环检查该单一换行符。

Sub WriteListAsCSV(list As Object, filePath As String)
    Dim fso As New FileSystemObject
    Dim ts As TextStream
    Set ts = fso.CreateTextFile(filePath, True)
    Dim line As Variant
    Dim i As Integer
    For i = 0 To list.Count
        line = list(i)
        ts.Write (line)
        'If not last line
        If Not i = list.Count Then
            'Write blankline
            ts.WriteLine()
        End If
   Next
   ts.Close
End Sub

有没有办法在VBA中删除一个字符,如 Backspace 按钮?还是另外一个巧妙的技巧呢?

1 个答案:

答案 0 :(得分:3)

我的想法是使用文件长度删除与换行符相对应的最后一个字符集,Chr(10)Chr(13),有时两者都是。

怎么做

当我检查如何使用某个功能时,我发现了这个: Remove last carriage return file ,这完全涵盖了我的想法......
也许看看它很清楚。

编辑(cf @ Siddharth Rout评论)
修改和评论版本的代码(如果链接死亡。我不相信此代码)

Set objFSO = CreateObject("Scripting.FileSystemObject")   
Set objFile = objFSO.OpenTextFile("path\to\file", 1)     ' -- 1:read

strFile = objFile.ReadAll
objFile.Close

' We check if the two last characters correspond to a linebreak:
If Right(strFile, 2) = vbCrLf Then 
    ' If so, we remove those charaters:
    strFile = Left(strFile, Len(strFile)- 2)
    Set objFile = objFSO.OpenTextFile("path\to\file", 2) ' -- 2:write
    objFile.Write strFile
    objFile.Close
End If

我不确定这是更优雅的方式,但它似乎是一个非常有效的方法。希望这对你有用。