text datei einlesen

  • grüß euch....


    meine Textdatei sieht wie folgendermaßen aus:

    AT;PF122 Bolzenbohr. F134 200712;1299;1
    MK;1299 Bolzenbohrung Rundh. Ausgangseite;0,0000;2,5000;
    SV;1,8300;1,6800;1,3900
    SV;1,5300;1,5400;1,3800
    SV;1,1900;1,1300;1,8000
    SV;0,6300;1,0300;1,2100
    SV;1,9100;1,8000;1,7600
    SV;1,5700;1,7900;1,6600
    SV;1,0300;1,1100;0,8300
    MK;1299 Bolzenbohrung Rundheit;0,0000;2,5000;
    SV;1,7500;1,0600;1,1700
    SV;1,5900;0,5900;0,9300
    SV;0,9000;1,1000;1,0000
    SV;1,7100;1,4800;1,1500
    SV;1,5300;1,2300;1,2900
    SV;0,9100;1,1200;1,0700
    SV;1,0100;1,3300;1,2400
    SV;1,9000;1,7400;1,3600
    SV;1,2000;1,1900;1,1800

    wo MK; vorne steht sind Merkmale
    SV; sind einfach Messdaten für dieses Merkmal bis zum nächsten Merkmal also für merkmal 1 wäre das 1,8300/1,6800/....0,8300

    ich würde nun gerne die daten in eine bestehende excel arbeitsmappe so einfügen:
    Merkmal1 merkmal2
    1,8300 1,7500
    1,6800 1,0600
    .....................
    ....................
    0,8300 1,1800

    hab mir gedacht messdaten vorher in feldern splitten und speichern... nur wie ?!

  • speichern => array
    splitten => die ersten zeichen z.b. mit left und instr()

    zumindest in vb/vba müsste des klappen

    edit: grad entdeckt, du hast ja fast immer die gleiche länge...
    also ich würd in etwa so vorgehen
    - datei zeilenweise einlesen
    - ersten 2 stellen mit left(zeile,2) auslesen
    - if-abfrage ob mk oder sv und entsprechend weiter verarbeiten

    sv:
    - mit MID() arbeiten... da kannst du von position x an z.b. die nächsten 6 zeichen lesen (mid(zeile,4,6) für erste zahl)
    at,mk:
    - evtl mit InStr()... also von position x bis zum nächsten trennzeichen (instr(zeile,4,";") für ersten wert)
    - bei den nachfolgenden musst halt immer mit dem wert vorher arbeiten (instr(zeile,instr(zeile,4,";"),";") für wert 2)

  • danke schon mal für die ersten ansätze...

    die text datei muss aber nicht immer gleich ausschauen, bei SV können durchaus mehr oder weniger messdaten stehen! Natürlich aber dann auch bei allen Zeilen mit SV voran

  • falls wen interessiert, habs so gelöst!
    lese die Daten halt von ende zuerst ein...

    k = 0
    i = anzahl_zeilen
    Do
    Do
    mess = Right(feld(i), Len(feld(i)) - 3)
    i = i - 1
    v = Split(mess, ";")
    j = UBound(v)
    For k = 0 To j
    ReDim Preserve messwerte(m) As Double
    strZeile = v(k)
    messwerte(m) = strZeile
    m = m + 1
    Next k
    Loop Until Left(feld(i), 2) = "MK"
    n = n + 1
    Call quipsydaten(messwerte, n)
    m = 0
    i = i - 1
    Loop Until Left(feld(i), 2) = "AT"
    End Sub