Hallo Memento! Also arbeite eigentlich nicht mit Access aber unten das sollte trotzdem klappen. Wie letztens aber schon geschrieben, musst du (bist ja Besitzer der Quelldateien), mal schauen, ob du in dem Header irgendwelche Besonderheiten finden kannst, die dir helfen die Nummer eineindeutig !! zuzuordnen. Ich bin mal, auf Grund des Beispieles davon ausgegangen, dass sie gesuchte Nunmer die erste Zeichenreihenfolge mit mehr als 6 Zahlen hat. Kannst du aber noch abändern.
Wie du schon festgestellt hast, klappt die INPUT Methode nicht da SUB als Dokumentende interpretiert wird. Hätte 2 Möglichkeiten im Angebot,
1. Variante:
Abstecher in Excel machen und mit
Workbooks.OpenText Filename:=Dateiname, DataType:=xlDelimited, Tab:=True
die Datein in ein neues Excel Sheet (wird erstellt) einlesen und dann bearbeiten. Weiß aber nicht, ob das Fehlerfrei aus Access läuft und geht auch nur, wenn du deine Daten im TXT Format hast. Solltest du auf pdf Dokumente zugrifen geht das nicht.
2. Variante:
Den Lesemodus ändern. Lese die Datei binary. Dann wird nicht das gelesene Zeichen interpretiert sondern "nur" als Wert genommen. Bei deiner Variante liest du alle Zeilen ein. Dauert m.E. lange, wobei du ja nur den Header brauchst - 4 bis 5 Zeilen / die ersten 300 Zeichen !? Da solltest du mal schauen, dass könnte man noch ändern, so dass er nur eine bestimmte Zeilenzahl bzw. Zeichenzahl einliest. Ansonsten einfach mit der get Methode arbeiten (da ist dann schon alles drin und du musst die Zeilen nicht verketten). Sind dann wie folgt aus. Habe dazu mal noch eine Funktion gepackt, die die erste Zahl mit mehr als 6 Zeichen ausgibt - sollte dann vermtl. deine Zahl sein.
Schau mal, ob das so wie gewünscht klappt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | Sub zahl_suchen()
Dim text As String
Dim Datei As String
Dim Nr As Long
Datei = "C:\Users\ich\Desktop\new.txt"
Nr = FreeFile
Open Datei For Binary As Nr
text = Space(LOF(Nr))
Get #Nr, , text
Close Nr
Call auswerten(text)
End Sub
Function auswerten( ByVal quelle As String )
Dim regEx As Object
Dim treffer As Object
Set regEx = CreateObject( "Vbscript.Regexp" )
With regEx
.Pattern = "[0-9]+"
.Global = True
Set treffer = .Execute(quelle)
End With
With treffer
If .Count > 0 Then
For i = 1 To .Count
If Len(.Item(i - 1)) > 6 Then
MsgBox .Item(i - 1)
Exit For
End If
Next i
End If
End With
End Function
|
Das sollte eigentlich klappen.
Viele Grüße
|