Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
756to760
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

*.prn - zeichfolge suchen

*.prn - zeichfolge suchen
18.04.2006 22:14:23
Ingo
Hallo allerseits,
durch ein externes Programm wird in einem Formular ein Aktenzeichen ausgegeben.
Das Ausgabefeld ist nicht zu editieren / ansprechbar.
Allerdings habe ich 'mal den Ausdruck des Formulars in eine Datei umgeleitet
und kann, wenn ich die *.prn mit notepad öffne, neben seitenweise kryptischer Zeichen "versteckt" das Aktenzeichen sehen.
Der Aufbau ist immer 123/aa/xxxxxxx/2006
Wobei die 7 mal ? für eine nicht vorhersehbare Ziffernvergabe stehen.
Wie kann ich 123/aa/?/2006 aus diesem Zeichensalat extrahieren ?
Danke für Unterstützung
Gruß, Ingo

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: *.prn - zeichfolge suchen
18.04.2006 22:29:59
Solaiman
Hallo Ingo,
ist es möglich, ein Beispiel der prn-Datei hochzuladen?
123/aa/xxxxxxx/2006
ist nur ein Ausschnitt, wenn ich die Gesamtstruktur kenne, kann ich dir evtl. mehr sagen.
Bis später
Solaiman
AW: *.prn - zeichfolge suchen
18.04.2006 23:12:27
Ingo
Hallo Solaiman,
ist leider nicht möglich, da das fragliche Programm in der Fa. läuft.
Aber ich vermute einmal, dass die Endung *.prn unerheblich ist,
da die Datei auch als *.txt umbenannt und geöffnet werden kann.
Stell Dir also eine mehrseitige *.txt Datei vor, wobei jede Zeile eine unbekannte Anzahl von Zeichen enthält.
Und in einer dieser Zeilen steht an unbekannter Stelle das 123/aa/?/2006
Ich hoffe, ich konnte es verständlich machen ?
Gruß, Ingo
Anzeige
AW: *.prn - zeichfolge suchen
18.04.2006 23:43:31
{Boris}
Hi Ingo,
importier die txt-Datei irgendwie in Excel und verteil sie in einem ganzen Blatt.
Anschließend eines dieser 2 beispielhaften Makros:
Option Explicit

Sub wo_sind_die_dinger()
Dim C As Range, fA As String, l As Long
l = 1
With Cells
Set C = .Find(what:="123/aa/?/2006", lookat:=xlPart)
If Not C Is Nothing Then
fA = C.Address
Do
MsgBox "Gefunden in Zelle " & C.Address(0, 0), , "Treffer Nr. " & l
Set C = .FindNext(C)
l = l + 1
Loop While Not C Is Nothing And C.Address <> fA
End If
End With
End Sub


Sub oder_so()
Dim C As Range, fA As String, arr() As String, l As Long
l = WorksheetFunction.CountIf(Cells, "*123/aa/?/2006*")
ReDim arr(0 To l)
l = 0
With Cells
Set C = .Find(what:="123/aa/?/2006", lookat:=xlPart)
If Not C Is Nothing Then
fA = C.Address
Do
arr(l) = C.Address
Set C = .FindNext(C)
l = l + 1
Loop While Not C Is Nothing And C.Address <> fA
End If
End With
Sheets(2).Range("A1:A" & l) = WorksheetFunction.Transpose(arr())
End Sub

Grüße Boris
Anzeige
AW: *.prn - zeichfolge suchen
18.04.2006 23:54:36
Nepumuk
Hallo Ingo,
mit Unterstützung von Nancy:
Public Sub prcExtract() '123/aa/?/2006
    Dim objFSO As Object, objRegEx As Object
    Dim objMatch As Object, objMatchCollection As Object
    Dim intFilenumber As Integer
    Dim vntText As Variant
    Dim strFile As String
    strFile = "C:\test.prn" 'Anpassen !!!
    intFilenumber = FreeFile
    Set objFSO = CreateObject("scripting.filesystemobject")
    Set objRegEx = CreateObject("vbscript.regexp")
    vntText = objFSO.GetFile(strFile).OpenAsTextStream.ReadAll
    Close #intFilenumber
    With objRegEx
        .MultiLine = True
        .Global = True
        .IgnoreCase = False
        .Pattern = "123/aa/(\d{7})/2006"
        Set objMatchCollection = .Execute(vntText)
    End With
    For Each objMatch In objMatchCollection
        MsgBox objMatch.SubMatches(0)
    Next
    Set objRegEx = Nothing
    Set objMatchCollection = Nothing
    Set objFSO = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: *.prn - zeichfolge suchen
19.04.2006 00:15:18
Nepumuk
Hi,
und noch ein bisschen Müll von testen rauswerfen:
Public Sub prcExtract() '123/aa/?/2006
    Dim objFSO As Object, objRegEx As Object
    Dim objMatch As Object, objMatchCollection As Object
    Dim vntText As Variant
    Dim strFile As String
    strFile = "C:\test.prn" 'Anpassen !!!
    Set objFSO = CreateObject("scripting.filesystemobject")
    Set objRegEx = CreateObject("vbscript.regexp")
    vntText = objFSO.GetFile(strFile).OpenAsTextStream.ReadAll
    With objRegEx
        .MultiLine = True
        .Global = True
        .IgnoreCase = False
        .Pattern = "123/aa/(\d{7})/2006"
        Set objMatchCollection = .Execute(vntText)
    End With
    For Each objMatch In objMatchCollection
        MsgBox objMatch.SubMatches(0)
    Next
    Set objRegEx = Nothing
    Set objMatchCollection = Nothing
    Set objFSO = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: *.prn - zeichfolge suchen
19.04.2006 09:57:10
Ingo
Moin Nepumuk,
die Suche mit einem regulären Ausdruck finde ich erst einmal gut ;-)
Nur leider funktioniert Dein Vorschlag nicht.
Keine Fehlermeldung, aber auch kein Treffer.
Gruß, Ingo
Geht und Geht nicht ;-)
19.04.2006 21:19:57
Ingo
Momentan bin ich zu Hause, unter 2003 gehts' einwandfrei.
Deine Datei entspricht im kleinen schon der zu durchsuchenden
Datei in der Fa.
Kann es sein, dass der Code unter 2000 nicht läuft ?
(War heute meine Arbeitsumgebung - ich nehme morgen mal einen 2003er)
Ein weiteres Problem in der Fa. könnte auch die etwas
eigenwillige Installation duch die Admins sein, die immer wieder
für Überraschungen gut ist.
Z.B. läuft auf den 2003er Clients die Application.FileSearch nicht.
Jedenfalls habe ich heute erst einmal mit der Lösung von Ramses
weitergebastelt - gleichwohl täte mich schon interessieren,
warum Dein Code in der Fa. nicht will.
Anzeige
AW: Geht und Geht nicht ;-)
19.04.2006 22:02:28
Nepumuk
Hallo Ingo,
ich arbeite mit Excel2000 und bei mir geht's.
Gruß
Nepumuk
AW: Geht und Geht nicht ;-)
19.04.2006 22:18:44
Ingo
Ok, gut zu wissen.
Ich teste das morgen noch auf der anderen Umgebung.
Evtl. fällt Dir ja beizeiten noch etwas ein, womit das
"Problem" zusammen hängt.
Mein eigentliches Anliegen ist ja auf einem anderen Weg gelöst;
wäre aber grundsätzlich interessant wenn man wüßte,
woran es hapert.
Bis dann und danke für die Mühe
Gruß, Ingo
Geht nicht
20.04.2006 14:44:34
Ingo
Hi Nepumuk,
nur zur Info - in der Fa. getestet und will weder unter 2000 noch unter 2003.
Merkwürdig ist das ...
In meiner häuslichen Umgebung auf beiden Systemen kein Problem.
Dein Job war also prinzipiell, wie erwartet, gut ;-)
Gruß, Ingo
Anzeige
AW: Geht nicht
20.04.2006 17:00:22
Nepumuk
Hallo Ingo,
hast du das zu Hause mit den selben Daten wie in der Firma getestet?
Gruß
Nepumuk

Ja o.T.
20.04.2006 18:45:02
Ingo
.
AW: Ja o.T.
20.04.2006 19:37:42
Nepumuk
Hallo Ingo,
dann müsste ich mich mal an eueren Firmenrechner setzen, um das zu rekonstruieren. Ich habs jetzt mit 2000 XP und 2003 getestet. Null Problemo, jedes mal kam die richtige Meldung. Die DLL's müssen ja vorhanden sein, sonst würde er ja beim erstellen der Objekte schon meckern. Und wenn es Regex auf drei verschiedenen Rechnern mit drei verschiedenen Versionen findet, warum dann nicht auf Rechner 4 ?
Ratlos
Nepumuk
Anzeige
Regex
20.04.2006 19:55:21
Ingo
Evtl. dumme Fragen ...
- Ist für vbscript.regexp eine bestimmte VB-Version notwendig ?
- Arbeitet Dein Code im Systembereich des BS/OS, der mir als
eingeschränkter User nicht zur Verfügung steht ?
AW: Regex
20.04.2006 20:04:28
Nepumuk
Hallo Ingo,
1. Für die RegEx ist Minimun Office2000 erforderlich.
2. Nein, das sind ganz normale Funktionen die im Office zur Verfügung stehen.
Gruß
Nepumuk
AW: Ratlos
20.04.2006 21:51:34
Ingo
Tja, siehe Betreff....
Wie schon erwähnt,
FileSearch geht bei uns auch nicht ( allerdings nur auf den 2003er )
Leider bekommt man nur sehr schwer Auskunft darüber, was die Administration
ständig verändert.
By the way, seit heute habe ich in Word keine Formularleiste mehr.
Das ist doch alles zum Mäuse melken ;-)
Und dann noch was am Rande,
hast Du i.S. Regex noch eine gute (verständliche) Seite parat ?
Durch die Regenechse wurstel ich mich gerade durch.
Und API mit Vorlagen / Beispielen ist sicher erst recht die richtige Frage an Dich ;-)
Ich sach' erst mal Danke;
evtl. löst sich der Knoten ja doch einmal (zufällig)
Gruß, Ingo
Anzeige
thx
20.04.2006 22:54:36
Ingo
Dafür habe ich Wikipedia tatsächlich noch nie verwendet -
klappt aber hervorragend ;-)
Danke für den Tip
Gruß, Ingo
AW: *.prn - zeichfolge suchen
19.04.2006 00:04:02
Ramses
Hallo
zwar spät, aber noch eine Variante die ziemlich flexibel ist :-)
Option Explicit

Sub test()
    'Übergabeparameter an die Funktion sind
    '1. Pfadangabe
    '2. Der String vor der unbekannten Zahl
    '3. Der String nach der unbekannten Zahl
    '4. Länge der unbekannten Zahl
    MsgBox Find_Unknown_String("C:\Test.txt", "123/aa/", "/2006", 7)
End Sub

Function Find_Unknown_String(strFullPath As String, preString As String, lastString As String, lenNumber As Integer) As String
    'by Ramses
    On Error GoTo myErrHandler
    Dim myTxtStr As String
    Dim myReadLine As String
    'Start einlesen
    Close #1
    Open strFullPath For Input As #1
    ' Schleife bis Dateiende.
    Do While Not EOF(1)
        Line Input #1, myReadLine
        If InStr(1, myReadLine, preString) > 0 Then
            If Mid(myReadLine, InStr(1, myReadLine, preString) + (Len(preString)) + lenNumber, Len(lastString)) = lastString Then
                Find_Unknown_String = Mid(myReadLine, InStr(1, myReadLine, preString), Len(preString) + Len(lastString) + lenNumber)
                Exit Function
            End If
        End If
    Loop
    Find_Unknown_String = ""
    Exit Function
    
    myErrHandler:
    MsgBox "Fehler in Suchfunction"
End Function




Gruss Rainer
Anzeige
AW: *.prn - zeichfolge suchen
19.04.2006 09:53:54
Ingo
Moin Ramses,
"zwar spät, aber noch eine Variante die ziemlich flexibel ist"....
Stimmt ;-)
Klappt im ersten Anlauf.
Danke sehr
Ingo
@all
19.04.2006 00:22:52
Ingo
Sollte mehr als genug Stoff zum basteln sein ;-)
Klasse, herzlichen Dank !
Gruß, Ingo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige