使用 VBA 从文本文件中删除空行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/45038043/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-12 12:53:03  来源:igfitidea点击:

Removing blank lines from a text file using VBA

excelvbaexcel-vba

提问by Dyhouse

This continues on from a previous question I have asked actually. I am desperate to find a way to remove the trailing blank lines from text files when generated from an excel file to which I have been unsuccessful so far. I have found the below code just now and when I execute it, I can see that it has the basis for what I want (I think) but I don't have the skill to amend it so that ignores any line with data in it and just deletes the blank spaces. Can anyone help me amend this so that it can delete those pesky white spaces please?

这从我实际问过的上一个问题继续。当我从一个 excel 文件生成时,我很想找到一种方法来从文本文件中删除尾随的空行,但到目前为止我还没有成功。我刚刚找到了下面的代码,当我执行它时,我可以看到它具有我想要的基础(我认为),但我没有修改它的技能,因此忽略其中包含数据的任何行并且只是删除空格。任何人都可以帮我修改它,以便它可以删除那些讨厌的空格吗?

 Sub AltText()
  Dim File As String
  Dim VecFile() As String, Aux As String
  Dim i As Long, j As Long
  Dim SizeNewFile As Long

  File = Application.GetOpenFilename

  'Import file lines to array excluding first 3 lines and
  'lines starting with "-"
  Open File For Input As 1
  i = 0
  j = 0
  Do Until EOF(1)
    j = j + 1
    Line Input #1, Aux
    If j > 3 And InStr(1, Aux, "-") <> 1 Then
        i = i + 1
        ReDim Preserve VecFile(1 To i)
        VecFile(i) = Aux
    End If
  Loop
  Close #1
  SizeNewFile = i

  'Write array to file
  Open File For Output As 1
  For i = 1 To SizeNewFile
    Print #1, VecFile(i)
  Next i
  Close #1

  MsgBox "File alteration completed!"

 End Sub

回答by Brian M Stafford

To remove lines that are blank, try the following code:

要删除空白行,请尝试以下代码:

Sub AltText()
   Dim inFile As String
   Dim outFile As String
   Dim data As String

   inFile = Application.GetOpenFilename
   Open inFile For Input As #1

   outFile = inFile & ".alt"
   Open outFile For Output As #2

   Do Until EOF(1)
      Line Input #1, data

      If Trim(data) <> "" Then
         Print #2, data
      End If
   Loop

   Close #1
   Close #2

   Kill inFile
   Name outFile As inFile

   MsgBox "File alteration completed!"
End Sub

回答by CodeSerendipity

you need to look for blank spaces and carriage return characters, so after you read the line, check for content:

您需要查找空格和回车符,因此在阅读该行后,检查内容:

dim temp as string

temp = Replace (aux, chr(10), "")  
temp = Replace (temp,chr(13),"")
temp = Rtrim(Ltrim(temp))  ' remove just blank stuff

now check for the length:

现在检查长度:

if j > 3 and Len(temp) <> 0 then
    ......
    add the lines

so your code should look like this:

所以你的代码应该是这样的:

Sub AltText()
  Dim File As String
  Dim VecFile() As String, Aux As String
  Dim i As Long, j As Long
  Dim SizeNewFile As Long

  File = Application.GetOpenFilename

  'Import file lines to array excluding first 3 lines and
  'lines starting with "-"
  Open File For Input As 1
  i = 0
  j = 0
  Do Until EOF(1)
    j = j + 1
    Line Input #1, Aux

    '=====
     dim temp as string

     temp = Replace (aux, chr(10), "")  
     temp = Replace (temp,chr(13),"")
     temp = Rtrim(Ltrim(temp))  ' remove just blank stuff
    '======

    If j > 3 And Len(temp) <> 0 Then
        i = i + 1
        ReDim Preserve VecFile(1 To i)
        VecFile(i) = Aux
    End If
  Loop
  Close #1
  SizeNewFile = i

  'Write array to file
  Open File For Output As 1
  For i = 1 To SizeNewFile
    Print #1, VecFile(i)
  Next i
  Close #1

  MsgBox "File alteration completed!"

 End Sub