Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Text in Access importieren





Frage

Hallo Leute, ich importiere in eine Access-Tabelle zeilenweise Text aus einer .txt Datei. In jeder Zeile gibt es eine Zeichenfolge, die ich importieren möchte, alles andere soll weg. Die Zeichenfolge beginnt immer mit 2 Buchstaben, hat insgesamt 7 Zeichen und kann vorne, in der Mitte oder Hinten in der Zeile vorkommen (also unregelmässig). Beispiel1: 323 ,. jk kl CK00000 k hh gg ghgh '# Aus dieser Zeile sollte nur CK00000 importiert werden. Beispiel2: as f ; jj lö jj s j kk AB123HL Aus dieser Zeile sollte nur AB123HL importiert werden. Wie filtere ich meine Zeichenfolge raus? Vielen Dank ch

Antwort 1 von Teddy

Schau Dir mal die Funktionen instr und mid an.
Gruß
Teddy

Antwort 2 von El Bobbele

Hallo chichitta!

Befindet sich zwischen der gesuchten Zeichenfolge und dem Rest der Zeile immer ein Leerzeichen?

Beispiele:
Start ->|AA12345 abcde... ...fghi AA12345 jklmn... ...opqr AA12345|<- Ende

Gruss
El Bobbele



Antwort 3 von El Bobbele

Moin chichitta!

Ich weiss ja nicht, ob sich das hier erledigt hat oder nicht, aber ich möchte die folgende Funktion nicht umsonst geschrieben haben und veröffentliche sie halt mal.

Option Compare Binary
Option Explicit

Public Function GetItem(Text As String, Optional Length As Long = 7) As String
    Dim lngLen As Long
    Dim lngPos As Long
    Static lngPreviousLength As Long
    Static strFilterMask As String
    Dim strCurrentMask As String
    Dim strItem As String
    Dim strResult As String
    
    lngLen = Len(Text)
        
    If lngLen < Length Then
        'Zeichenfolge ist kürzer als die Mindestlänge
        strResult = vbNullString
    Else
        If lngPreviousLength <> Length Then
            'Eine neue Länge wird benötigt,
            'Filtermaske wird neu aufgebaut
            lngPreviousLength = Length
            strFilterMask = "[A-Z][A-Z]"
            For lngPos = 1 To Length - 2
                strFilterMask = strFilterMask & "[A-Z0-9]"
            Next
        End If
        
        For lngPos = 1 To lngLen - Length + 1
            'Filtermaske bestimmen
            If lngPos = 1 Then
                'Start (Leerzeichen hinten anhängen)
                strCurrentMask = strFilterMask & "[ ]"
                strItem = Mid(Text, lngPos, Length + 1)
            
            ElseIf lngPos > 1 And lngPos < lngLen - Length Then
                'Mitte (Leerzeichen vorne und hinten anhängen)
                strCurrentMask = "[ ]" & strFilterMask & "[ ]"
                strItem = Mid(Text, lngPos, Length + 2)

            ElseIf lngPos = lngLen - Length Then
                'Ende (Leerzeichen vorne anhängen)
                strCurrentMask = "[ ]" & strFilterMask
                strItem = Mid(Text, lngPos, Length + 1)
            
            Else
                strCurrentMask = vbNullString
            End If
            
            If strItem Like strCurrentMask Then
                strResult = Trim(strItem)
                Exit For
            End If
        Next
    End If
    GetItem = strResult
End Function


Die Funktion liefert den ersten Ausdruck aus einer Zeile zurück, der zwei Buchstaben und anschliessend fünf Zahlen oder Buchstaben enthält. Der Ausdruck muss durch Leerzeichen vom Rest der Zeichenfolge getrennt sein. Falls die ersten beiden Zeichen Großbuchstaben sein müssen, dann muss am Modulbeginn anstelle von "Option Compare Database" dann "Option Compare Binary" eingetragen sein. Aus diesem Grund sollte die Funktion in ein eigenes Modul kopiert werden, um die Like-Textvergleiche anderer Funktionen im selben Modul nicht unbeabsichtigt zu beeinflussen.

Ich habe das umgesetzt, was ich aus deinen Schilderungen herauslesen konnte, hoffentlich passt es auch so.

Gruss
El Bobbele


Antwort 4 von chichitta

Hallo lieber El Bobbele,

das ist genau das was ich brauche!!!!!!!! das ist genial!!

Gruesse

CH

Antwort 5 von El Bobbele

*lach* So macht helfen Spass! :D

Ich danke dir im Gegenzug für die interessante Bastelaufgabe und für deine - wenn auch späte - Rückmeldung. ;-)

Gruss
El Bobbele