Loading linux text file into excel using VBA

2020-02-01 00:39发布

I have a text file created on linux, if I open it in Word pad the file appears normally. However when I open it in notepad, and when I try to load it into excel using the code below it appears as a single line.

' Open the file
Open Filename For Input As #1

' Look for the Table Title
Do While Not (EOF(1) Or InStr(TextLine, TableTitle) > 0)
    Line Input #1, TextLine
Loop

How can I split it into the original lines? Is there an end of line seperator, that vba can use?

3条回答
何必那么认真
2楼-- · 2020-02-01 01:20

The Function

Public Function GetLines(fpath$) As Variant
    'REFERENCES:
    'Microsoft Scripting Runtime // Scripting.FileSystemObject
    'Microsoft VBScript Regular Expressions 5.5 // VBScript_RegExp_55.RegExp
    Dim fso As New Scripting.FileSystemObject, RE As New VBScript_RegExp_55.RegExp
    If fso.FileExists(fpath) = True Then
        Dim mts As MatchCollection, mt As Match
        Dim lines() As String
        Dim content$: content = fso.OpenTextFile(fpath).ReadAll()
        With RE
            .Global = True
            .Pattern = "[^\r\n]+" 'catch all characters except NewLines/Carraige Returns
            If .test(content) = True Then
                Set mts = .Execute(content)
                ReDim lines(mts.Count - 1)
                Dim pos&
                For Each mt In mts
                    lines(pos) = mt.Value
                    pos = pos + 1
                Next mt
            Else
                MsgBox "'" & Dir(fpath) & "' contains zero bytes!", vbExclamation
            End If
        End With
        GetLines = lines
    Else
        MsgBox "File not found at:" & vbCrLf & Dir(fpath), vbCritical
    End If
End Function

and could be invoked by (from immediate window)

?GetLines("C:\BOOT.INI")(2)

and the output

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

The above example could be used to get all lines from any text file originated from any OS.


Hope this helps.

查看更多
疯言疯语
3楼-- · 2020-02-01 01:30

Open the linux text file using Windows "Word Pad". Save the file. Word Pad will convert the linux line-feed (\n) to carriage return+line-feed (\r\n) as it saves the file. No coding is necessary.

查看更多
姐就是有狂的资本
4楼-- · 2020-02-01 01:43

Linux uses a line-feed (\n) to denote a new line rather than the carriage return+line-feed (\r\n) as used by Windows so you can't use Line input, instead:

Open Filename For Input As #1
'//load all
buff = Input$(LOF(1), #1)
Close #1

'//*either* replace all lf -> crlf
buff = replace$(buff, vbLf, vbCrLf)
msgbox buff

'//*or* line by line
dim lines() As String: lines = split(buff, vbLf)
for i = 0 To UBound(lines)
   msgbox lines(i)
next
查看更多
登录 后发表回答