brauseklaus
Goto Top

.unv mittels VBA auslesen

Hallo,

hat jemand vielleicht Erfahrung mit dem Dateientyp *.unv? Ich will bestimmte Abschnitte aus dieser Datei (diverse Messdaten) in Excel importieren. UNV-Dateien lassen sich mittels Editor öffnen. Wenn ich diese dann als *.txt abspeichere kann ich die neue Datei problemlos mittels VBA auslesen. Leider habe ich hunderte dieser *.unv Dateien und kann nicht jede erst manuell in *.txt umwandeln.

Gibt es eine Möglichkeit *.unv mittels VBA direkt anzusprechen, sprich zu öffnen und dann auszulesen, oder gibt es einen Code sinngemäß wie „öffnen mit Editor“?

Der folgende Code wird zwar vom Debugger akzeptiert, jedoch findet der Rechner beim ausführen kein Ende und ich muss nach Stunden abbrechen.

…
Datei = "Z:\Eigene Dateien\Projekt\Auswertung\inc10.unv"  
Von = "WEAR" 'ab Zeile mit diesem Inhalt importieren  
Bis = "-1" 'ab Zeile mit diesem Inhalt nicht mehr importieren  
Trenn = " " 'Leerzeichen als Trennzeichen zwischen den Feldern  
'Trenn = vbTab 'TAB als Trennzeichen zwischen den Feldern  

SpNr = 1 'Daten ab Spalte A ...  
ZNr = 3 'der Zeile 3 eintragen  


Set DateiEin = CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei, 1, 0, -1) 'Textdatei im Unicode-Format öffnen  
…

Grüße Brauseklaus

Content-Key: 144283

Url: https://administrator.de/contentid/144283

Printed on: April 19, 2024 at 05:04 o'clock

Member: PCFJKG
PCFJKG Jun 07, 2010 at 10:07:21 (UTC)
Goto Top
Hallo Brauseklaus,

z.B. in Access mit Line Input

Dim Test as string
Open incl10.unv For Input As #1
Line Input #1, Test
close #1

---> den String in Test auswerten wie's beliebt, z.B. mit mid() o.ä

oder eine Schleife bis von incl10.unv alle Zeilen eingelesen wurden und die Auswertung nach jeder Zeile vornehmen.

Gruß
PCFJKG
Member: Brauseklaus
Brauseklaus Jun 07, 2010 at 13:34:14 (UTC)
Goto Top
Hallo PCFJKG,

danke erstmal dafür.

leider habe ich bis jetzt keinerlei Access Erfahrung, aber wenn es nur auf diesem Wege zu machen ist, werde ich mich wohl, in einer ruhigen Minute, damit näher beschäftigen müssen.

Noch eine Frage: Habe mir, mit meinen sehr bescheidenen VBA Kenntnissen, einen vorläufigen Code zum einlesen von .*txt Dokumenten zusammen gebastelt. Die Werte sollen auf einem Tabellenblatt nebeneinander aufgelistet werden. Leider wird nur der 1.Block, sprich NORMALSTRESS importiert.
Kann da vielleicht mal jemand rüberschauen?

Sub Importieren()
Datei = "\\Fem-k\Projekte\AlDi\UNV-Datein\zwei_symetrien\inc5.txt"  
Von = "NORMALSTRESS" 'ab Zeile mit diesem Inhalt importieren  
Bis = "FLOWSTRESS" 'ab Zeile mit diesem Inhalt nicht mehr importieren  
Trenn = " " 'Leerzeichen als Trennzeichen zwischen den Feldern  
'Trenn = vbTab 'TAB als Trennzeichen zwischen den Feldern  

SpNr = 1 'Daten ab Spalte A ...  
ZNr = 3 'der Zeile 3 eintragen  


Set DateiEin = CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei, 1, 0, -1) 'Textdatei im Unicode-Format öffnen  
Fertig = False 'Schalter initialisieren  
Import = False 'Schalter initialisieren  
Do While Not DateiEin.AtEndOfStream And Not Fertig
    Satz = DateiEin.ReadLine 'Datensatz aus Datei einlesen  
    Satz = Replace(Satz, ".", ",")  
    If Import Then 'Satz ist zu importieren  
        If InStr(Satz, Bis) = 0 Then 'Ende des Datenbereiches noch nicht erreicht  
            SatzEintragen Satz, ZNr, SpNr 'eingelesenen Satz in Tabellenzeile ZNr ab Spalte SpNr eintragen  
            ZNr = ZNr + 1 'nächste Tabellenzeile  
        Else
            Fertig = True 'Ende des vorgegebenen Bereiches - keine weiteren Daten einlesen  
        End If
    Else 'bisher wurde nicht importiert - ...  
        If InStr(Satz, Von) > 0 Then '... beginnt hier der Datenbereich?  
            Import = True 'ja; ab jetzt Zeilen importieren  
            SatzEintragen Satz, ZNr, SpNr 'eingelesenen Satz in Tabellenzeile ZNr ab Spalte SpNr eintragen  
            ZNr = ZNr + 1 'nächste Tabellenzeile  
        End If
    End If
Loop

Von = "TEMPERATURE" 'ab Zeile mit diesem Inhalt importieren  
Bis = "PREV_PRESS" 'ab Zeile mit diesem Inhalt nicht mehr importieren  
Trenn = " " 'Leerzeichen als Trennzeichen zwischen den Feldern  
'Trenn = vbTab 'TAB als Trennzeichen zwischen den Feldern  

SpNr = 8 'Daten ab Spalte H ...  
ZNr = 3 'der Zeile 3 eintragen  

Fertig = False 'Schalter initialisieren  
Import = False 'Schalter initialisieren  
Do While Not DateiEin.AtEndOfStream And Not Fertig
    Satz = DateiEin.ReadLine 'Datensatz aus Datei einlesen  
    Satz = Replace(Satz, ".", ",")  
    If Import Then 'Satz ist zu importieren  
        If InStr(Satz, Bis) = 0 Then 'Ende des Datenbereiches noch nicht erreicht  
            SatzEintragen Satz, ZNr, SpNr 'eingelesenen Satz in Tabellenzeile ZNr ab Spalte SpNr eintragen  
            ZNr = ZNr + 1 'nächste Tabellenzeile  
        Else
            Fertig = True 'Ende des vorgegebenen Bereiches - keine weiteren Daten einlesen  
        End If
    Else 'bisher wurde nicht importiert - ...  
        If InStr(Satz, Von) > 0 Then '... beginnt hier der Datenbereich?  
            Import = True 'ja; ab jetzt Zeilen importieren  
            SatzEintragen Satz, ZNr, SpNr 'eingelesenen Satz in Tabellenzeile ZNr ab Spalte SpNr eintragen  
            ZNr = ZNr + 1 'nächste Tabellenzeile  
        End If
    End If
Loop

Von = "WEAR" 'ab Zeile mit diesem Inhalt importieren  
Bis = "-1" 'ab Zeile mit diesem Inhalt nicht mehr importieren  
Trenn = " " 'Leerzeichen als Trennzeichen zwischen den Feldern  
'Trenn = vbTab 'TAB als Trennzeichen zwischen den Feldern  

SpNr = 12 'Daten ab Spalte L ...  
ZNr = 3 'der Zeile 3 eintragen  


Fertig = False 'Schalter initialisieren  
Import = False 'Schalter initialisieren  
Do While Not DateiEin.AtEndOfStream And Not Fertig
    Satz = DateiEin.ReadLine 'Datensatz aus Datei einlesen  
    Satz = Replace(Satz, ".", ",")  
    If Import Then 'Satz ist zu importieren  
        If InStr(Satz, Bis) = 0 Then 'Ende des Datenbereiches noch nicht erreicht  
            SatzEintragen Satz, ZNr, SpNr 'eingelesenen Satz in Tabellenzeile ZNr ab Spalte SpNr eintragen  
            ZNr = ZNr + 1 'nächste Tabellenzeile  
        Else
            Fertig = True 'Ende des vorgegebenen Bereiches - keine weiteren Daten einlesen  
        End If
    Else 'bisher wurde nicht importiert - ...  
        If InStr(Satz, Von) > 0 Then '... beginnt hier der Datenbereich?  
            Import = True 'ja; ab jetzt Zeilen importieren  
            SatzEintragen Satz, ZNr, SpNr 'eingelesenen Satz in Tabellenzeile ZNr ab Spalte SpNr eintragen  
            ZNr = ZNr + 1 'nächste Tabellenzeile  
        End If
    End If
Loop
DateiEin.Close 'Textdatei schließen  
MsgBox "Fertig."  
End Sub

Sub SatzEintragen(D, Z, S)
Do While InStr(D, "  ") > 0 'solange es noch zwei aufeinanderfolgende Leerzeichen im Satz gibt ...  
    D = Replace(D, "  ", " ") ' ... diese durch ein einzelnes ersetzen  
Loop
Felder = Split(D) 'Zeile in Felder zerlegen  
Cells(Z, S).Resize(1, UBound(Felder) + 1).Value = Felder 'in der Zeile Z die Spalten ab Spalte S mit den Feldwerten füllen  
End Sub

Wenn ich
 Set DateiEin = CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei, 1, 0, -1)  
in Zeile 41 und 71 einsetze wird auch die Temperartur eingelesen (2.Teil), der 3. Teil ("WEAR") fehlt weiterhin. Dazu kommt es zum "Laufzeitfehler 1004...Anwendungs- oder objektdefinierter Fehler".

Achja, ich nutze Excel 2003.

Grüße Brauseklaus
Member: PCFJKG
PCFJKG Jun 07, 2010 at 15:18:48 (UTC)
Goto Top
Hallo Brauseklaus,

Du hast sicher an meiner kurzen Antwort schon gemerkt, dass ich momentan ein Zeitproblem habe. Trotzdem kurzer Hinweis (der schwierig ist, weil ich denAufbau der .txt nicht kenne.

Muss nicht der Datensatzzeiger vor dem Lesen von WEAR neu gesetzt (positioniert) werden, damit er vor den betreffen Zeile zu lesen beginnt ?

Grüße
PCFJKG
Member: Brauseklaus
Brauseklaus Jun 07, 2010, updated at Oct 18, 2012 at 16:42:26 (UTC)
Goto Top
Hi,
kein Problem, ich bin für jede Kleinigkeit dankbar ;)

Habe mich bis hierher in einem anderem Thread hingearbeitet, der bastla hat mir da schon sehr weitergeholfen. Hier der Link: Definierten Abschnitt aus Textdokument in Excel importieren
Dort ist auch der prinzipielle Aufbau der *.unv bzw. *.txt- Dokumente beschrieben.


Zitat von @PCFJKG:
>
Muss nicht der Datensatzzeiger vor dem Lesen von WEAR neu gesetzt (positioniert) werden, damit er vor den betreffen Zeile zu lesen
beginnt ?

Wird er das nicht in Zeile 63, 64? Und die Textdatei müsste doch bis Zeile 92 noch zur Verfügung stehen...
Member: Brauseklaus
Brauseklaus Jun 07, 2010 at 19:10:11 (UTC)
Goto Top
Habe den Fehler gefunden. Der CODE ist mit meiner Ergänzung soweit richtig. Der Grund für den Abbruch des Programmes war, dass beim Eintragen in die Tabelle die TEMPERATURE-Werte die maximale Zeilenanzahl von 65536 überschritten wurde.....

Grüße Brauseklaus
Member: Brauseklaus
Brauseklaus Jun 10, 2010, updated at Oct 18, 2012 at 16:42:29 (UTC)
Goto Top