Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何通过VBA识别UNIX文本文件中隐藏的回车符?_Excel_Unix_Text Files_Ascii_Vba - Fatal编程技术网

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

Excel 如何通过VBA识别UNIX文本文件中隐藏的回车符?,excel,unix,text-files,ascii,vba,Excel,Unix,Text Files,Ascii,Vba,我有一个用Excel/VBA编写的应用程序,它可以读取用UNIX编写的文本文件。这些文件包含在有限元建模模拟设置中,其中20k+文本文件中的每一行都是单独的设置。我的应用程序搜索一个特定的设置,并用简单的英语将它们返回给用户。某一行可能如下所示: model.settings.excitation.modes=50 到目前为止,这行代码用于查找“=”符号和行尾之间的文本 InStr(1, FileContents, vbLf) 其中FileContents是“=”符号后的整个文本文件 我的应

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

model.settings.excitation.modes=50
到目前为止,这行代码用于查找“=”符号和行尾之间的文本

InStr(1, FileContents, vbLf)
其中FileContents是“=”符号后的整个文本文件

我的应用程序上游的某个地方发生了变化,无法找到假定的回车字符“vbLf”,但在记事本++中查看时,它显然存在。我的应用程序依赖于找到这个回车,现在它不工作了

我试过使用:

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))
但是这些都没有找到回车符

关于如何识别文本文件中使用的回车字符,有什么建议吗

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

您可以测试ASCII10或ASCII13:

编辑#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键:


非常确定VBA中有一个bug,我有013 010 013,VBA看不到,它只看到013 010


使用replace从字符串中删除013 010,然后检查结果,然后还有另一个013,因此需要2行代码才能删除它,因为这个错误

通常只需要对其中一个进行反复试验:vbCrLf、vbCr vbLf或vbNewLine。请看为什么不改用RegEx?这些都不起作用。我也试过使用CHR(10)和CHR(13),我想你需要运行一个循环并打印出每个字符的ascii值。知道“行尾”字符是什么会很有用,因此如果您可以将数据样本行中的ascii值添加到您的问题中,那么我们可能会提供更多帮助。@W5ALIVE请参阅我的编辑#1祝您好运。我快发疯了,为什么我的绳子不会断。您的解决方案帮助我确定了拆分的是哪个回车字符串。您没有提到在行中读取的方法。如果使用FilesystemObject.Readline,它将读取该行,而不会返回用于查找行的enad的记录分隔符。一旦记录在Excel中,分隔符就消失了。如果文件有Windows样式的换行符,则将有2个分隔符:CR+LF。如果是*尼克斯风格,那就只有LF了。如果它来自Mac,则只使用CR。这会影响Excel中的行。您可以使用Readline以外的其他方法来读取对流程有更多控制权的行。@charlesross您是对的。问题的作者没有说明数据是如何导入的。我只在导入后处理了操作。
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