Variable Zeichenkette nach bestimmtem Zeichen in Textdatei auslesen

  • VBScript

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von TheRedhawk.

    Variable Zeichenkette nach bestimmtem Zeichen in Textdatei auslesen

    Guten Morgen, aktuell möchte ich aus einer Datei werte in eine Ecelliste übertragen, die Datei ist wie eine xlm aufgebaut ->

    Spoiler anzeigen
    </autn:totalhits><autn:totaldbdocs>231376</autn:totaldbdocs><autn:totaldbsecs>231376</autn:totaldbsecs><autn:databasehits><autn:database name="Savannah_EmptyFiles">999</autn:database><autn:database name="Savannah_M_Oma">77616</autn:database><autn:database name="Savannah_F_abcede">123</autn:database><autn:database name="Savannah_M_KPRTD">46515</autn:database><autn:database name="Savannah_M_YYYY">123123<.... usw


    Hier soll einmal der "database name" in eine Excelzelle geschrieben werden und die darauf folgende "Zahlenreihe" in die nächste Zelle, d.h: also z.B. Variable1 für Zelle 1A=Savannah_EmptyFiles ; Variable2 für Zelle 2A= 999

    Alles läuft praktisch schon, nur hab ich keine Idee wie ich die Variable "database name" länge auslesen soll und die darauf folgene Zahlenreihe.

    Kann mir hier jemand helfen, ich komm auf keine Idee.... ;(
    Hi, wenn es wirklich immer in diesem Schema abläuft, dann gäbe es einige Möglichkeiten mit Instr bzw mid bzw split oder
    dem RegExp Objekt..

    Mal als Beispiel ohne RegExp:

    Visual Basic-Quellcode

    1. Set myf = fso.getfile(YourPath)
    2. Set txtstr = myf.openastextstream
    3. str= txtstr.readall
    4. myArr = Split(str,"<autn:database name=""")
    5. For a=1 To UBound(myarr)
    6. myName = Split(myarr(a),""">")
    7. myCount = Mid(myName(1),1,InStr(myName(1),"<")-1)
    8. WScript.Echo myName(0) & " " & myCount
    9. Next
    Das ist meine Signatur und sie wird wunderbar sein!
    Ja, hab es gelöst, aber da kommt das nächste Problem: Ich bekomme hier immer eine FehlerMeldung:

    "Index außerhalb des gültigen Bereichs: '[number: 1]'"
    Ich habe hier den Verdacht das er Versucht über das Ende vom eingelesenen String hinaus weiter zu arbeiten, kann mir aber nicht erklären warum.

    Visual Basic-Quellcode

    1. For a=1 To UBound(searchdb)
    2. namedb = Split(searchdb(a), """>")
    3. dbnameclean = Mid(namedb(1),1, InStr(namedb(1),"<")-1)
    4. databasename = dbnameclean
    5. dbspalte = Chr(I)
    6. rangedbname = dbspalteMsgBox dbspalte
    7. xAs.Range(rangedbname & "9").Value = namedb(0)
    8. xAs.Range(rangedbname & "9").Orientation = 90
    9. xAs.Range(rangedbname & "10").Value = databasename
    10. I = I + 1
    11. Next

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TheRedhawk“ ()

    Kann mir Evtl. hierbei jemand helfen? Wenn ich im Debugger gucke, sehe ich das er alles richtig in die Variablem schreibt bis zur letzten möglichen, jedoch dricht er dann ab.

    Spoiler anzeigen
    Dim mydb, dbstr, strdb, searchdb
    Dim dbname, dbnameclean, dbspalte
    Dim databasecount, rangedbname
    Dim Buchstabe, I,J, a, namedb, test
    I = 70
    J = 65

    Set mydb = objFSO.GetFile(objDialog.FileName)
    Set dbstr = mydb.OpenAsTextStream
    strdb = dbstr.ReadAll

    searchdb = Split(strdb, "<autn:database name=""")
    dbname = searchdb(1)

    For a = 1 To UBound(searchdb) 'Suche bis zum letzten Zeichen

    namedb = Split(searchdb(a), """>")
    dbnameclean = Mid(namedb(1),1, InStr(namedb(1),"<")-1)
    databasecount = dbnameclean
    dbspalte = Chr(I)
    rangedbname = dbspalte

    If (I = 91) Then
    I = I + 1
    End If

    If (I < 91) Then
    xAs.Range(rangedbname & "9").Value = namedb(0) 'Write name
    xAs.Range(rangedbname & "9").Orientation = 90 ' Rotation
    xAs.Range(rangedbname & "9").Font.Bold = True ' Bold
    xAs.Range(rangedbname & "10").Value = databasecount 'db count
    I = I + 1
    End If


    If (I > 91) Then
    dbspalte = Chr(J)
    rangedbname = "A" & dbspalte
    xAs.Range(rangedbname & "9").Value = namedb(0) 'Write name
    xAs.Range(rangedbname & "9").Orientation = 90 ' Rotation
    xAs.Range(rangedbname & "9").Font.Bold = True ' Bold
    xAs.Range(rangedbname & "10").Value = databasecount 'db count
    J = J + 1
    End If

    Next

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TheRedhawk“ ()

    Ok, hab das Problem gefunden, die Einzulesenen Daten belaufen sich auf 37 Stück, dummerweise zähe ich die Spalten hoch mit +1, was zur folge hat das ab Spalte Z nicht wie in Excel die Spalte AA, AB, AC folgen sondern das Zeichen was nach Z kommt.