如何通过VBA在UNIX文本文件中标识隐藏的回车符?

时间:2016-05-09 13:07:58

标签: excel-vba unix text-files ascii vba

我有一个用Excel / VBA编写的应用程序,它读取用UNIX编写的文本文件。这些文件包含有限元建模模拟设置,其中20k +文本文件中的每一行都是单独的设置。我的应用程序搜索特定的设置并以简单的英语将它们返回给用户。特定的行可能如下所示:

model.settings.excitation.modes=50

到目前为止,这行代码用于查找' ='之间的文本。标志和行尾

InStr(1, FileContents, vbLf)

其中FileContents是' ='之后的整个文本文件。符号

我的应用程序上游的某个地方已经改变了假定的回车字符' vbLf'无法找到,但在Notepad ++中查看时显然存在。我的申请取决于找到这个回车,现在它不起作用。

我尝试过使用:

Asc(Mid(AdsFileContentsX, 3, 1))

隔离回车符,但我最后得到了下一行的一个字符,所以它也不起作用。

我也尝试了以下所有内容

InStr(1, FileContents, vbLf)
InStr(1, FileContents, vbCrLf)
InStr(1, FileContents, vbCr)
InStr(1, FileContents, vbNewLine)
InStr(1, FileContents, Chr(10))
InStr(1, FileContents, Chr(13))

但这些都没有找到回车符。

有关如何识别文本文件中使用的回车字符的任何建议吗?

*已编辑以包含我尝试过的所有内容

2 个答案:

答案 0 :(得分:4)

您可以测试 ASCII10 ASCII13

Sub hskdjfh()
    v = Range("A1").Value
    If InStr(1, v, Chr(10)) > 0 Or InStr(1, v, Chr(13)) > 0 Then
        MsgBox "got a return"
    Else
        MsgBox "no return"
    End If
End Sub

修改#1:

以下是确定单元格中确切内容的一种方法:

Sub WhatsInThere()
    Dim s As String, L As Long
    Dim msg As String, i As Long

    msg = ""
    s = Range("A1").Text
    L = Len(s)

    For i = 1 To L
        msg = msg & vbCrLf & i & vbTab & Mid(s, i, 1) & vbTab & AscW(Mid(s, i, 1))
    Next i

    MsgBox msg
End Sub

在这种情况下,我在单元格 A1 中的 i 之后放置了 Alt + Enter

enter image description here

答案 1 :(得分:0)

很确定VBA中有一个错误,我有013 010 013而且vba看不到它,它只看到它是013 010,

使用replace从字符串中删除013 010,然后检查结果是那么另一个013,所以由于这个错误需要2行代码来删除它