2016-05-09 14 views
3

Ich habe eine Anwendung in Excel/VBA geschrieben, die in UNIX geschriebene Textdateien liest. Diese Dateien bestehen aus Finite-Elemente-Modellierungs-Simulationseinstellungen, wobei jede Zeile in einer 20k + Textdatei eine individuelle Einstellung darstellt. Meine Anwendung sucht nach einer bestimmten Einstellung und gibt sie in einfacher Sprache an den Benutzer zurück. Eine besondere Linie könnte wie folgt aussehen:Wie kann ein verstecktes Carriage Return-Zeichen in einer UNIX-Textdatei über VBA identifiziert werden?

model.settings.excitation.modes=50 

Bisher diese Zeile Code arbeitete den Text zwischen dem ‚=‘ Zeichen und dem Ende der Linie

InStr(1, FileContents, vbLf) 

wo Dateiinhalt ist das Ganze zu finden Textdatei nach dem '=' Symbol.

Irgendwo irgendwo vor meiner Anwendung hat sich das angenommene Wagenrücklaufzeichen 'vbLf' geändert, aber es ist eindeutig dort, wenn es in Notepad ++ angezeigt wird. Meine Anwendung hängt davon ab, diesen Wagenrücklauf zu finden, und jetzt funktioniert es nicht.

ich unter Verwendung versucht:

Asc(Mid(AdsFileContentsX, 3, 1)) 

die Wagenrücklaufzeichen zu isolieren, aber ich mit einem Zeichen aus der nächsten Zeile enden, so dass auch nicht funktioniert.

Ich habe versucht, alle die unten als auch

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)) 

aber keiner von ihnen den Wagenrücklaufzeichen gefunden.

Haben Sie Vorschläge, wie Sie das in einer Textdatei verwendete Wagenrücklaufzeichen identifizieren können?

* bearbeitet alles I aufgenommen

+1

Normalerweise erfordert es nur Versuch und Irrtum mit einer dieser: VbCrLf, VbCr VbLf oder VbNewLine siehe http: // Paketüberfluss.com/questions/556978/is-there-carriage-zurück-line-break-constant-in-ms-Zugriff – Charlie

+0

Warum benutzen Sie nicht RegEx? –

+0

Keine von diesen hat funktioniert. Ich habe es auch mit CHR (10) und CHR (13) versucht. – W5ALIVE

Antwort

2

Sie entweder ASCII10 oder ASCII13 versucht haben, testen:

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 

EDIT # 1:

Dies ist ein Weg, um genau zu bestimmen, was in einer Zelle ist:

I
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 

In diesem Fall erteilte Alt + kurz nach dem Geben Sie i in Zelle A1:

enter image description here

+0

@ W5ALIVE Siehe meine ** EDIT # 1 ** –

+0

Gott segne dich. Ich wurde verrückt, warum meine Saite sich nicht teilen würde. Ihre Lösung hat mir geholfen, zu erkennen, welcher Wagenstrang geteilt wurde. – Trm

+0

@Trm Sie sind herzlich willkommen! –

0

Ziemlich sicher, dass ein Fehler in VBA ist, ich habe 013 010 013 und vba kann es nicht sehen, es sieht es nur als 013 010,

entfernen 013 010 aus der Zeichenfolge mit ersetzen, dann checki Das Ergebnis ist THEN ein anderes 013, also dauert es 2 Zeilen Code, um es aufgrund dieses Fehlers zu entfernen