Загрузка текстового файла linux в excel с использованием VBA
У меня есть текстовый файл, созданный на linux, если я его открываю в Word pad, файл выглядит нормально. Однако, когда я открываю его в блокноте, и когда я пытаюсь загрузить его в excel, используя следующий код, он отображается как одна строка.
' 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
Как я могу разбить его на исходные строки? Есть ли конец разделителя строк, который может использовать vba?
Ответы
Ответ 1
Linux использует строку-строку (\n
) для обозначения новой строки, а не возврата каретки + строки-строки (\r\n
), используемых Windows, поэтому вы не можете использовать Line input
, а вместо:
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
Ответ 2
Функция
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
и может быть вызван (из immediate window
)
?GetLines("C:\BOOT.INI")(2)
и вывод
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
Приведенный выше пример может использоваться для получения всех строк из любого текстового файла, созданного с любой ОС.
Надеюсь, что это поможет.
Ответ 3
Откройте текстовый файл Linux с помощью Windows "Word Pad". Сохраните файл. Word Pad преобразует перевод строки linux (\n) в возврат каретки + перевод строки (\ r\n) при сохранении файла. Кодирование не требуется.