🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
2 messages
2 total messages Started by Prot Fri, 09 Oct 2015 18:09
Funkcja z regexp przy 500 wywołaniu sypie błędem 2042
#137018
Author: Prot
Date: Fri, 09 Oct 2015 18:09
55 lines
2815 bytes
Witam!

Pracuje nad parserem danych z formatu MT940 (sformalizowany format importu 
wyciągów bankowych) do accessa. Z mojej analizy wynika, że można go zrobić w 
VBA z wykorzystaniem właściwości tzw. submatches. Wykorzystać planuje 
funkcję:

Function GetItem(ByVal STR As String, Wzorzec As String, iNum As Long)

    Dim objRegExp As Object
    Set objRegExp = CreateObject("vbscript.regexp")
    On Error GoTo GetItem_Error
    With objRegExp
        .Global = True
        .Pattern = Wzorzec

GetItem = .Execute(STR)(iNum).SubMatches(0)

    End With

GetItem_Exit:
        On Error GoTo 0
        Set objRegExp = Nothing
        Exit Function

GetItem_Error:
        GetItem = CVErr(xlErrNA)
        Resume GetItem_Exit

End Function


W testowym pliku tekstowym mam ponad 400 linii danych, obejmujących 28 
rekordów tablicy z wyciągiem bankowym.

Dziwny problem powstał przy testowaniu w VBE 2007 działania tej funkcji: w 
kodzie testowym wywołuje tą funkcję (oczywiście w pętli) z 500 razy i 
wyłuskuje mi wszystkie potrzebne stringi i nagle przy 27 rekordzie danych 
wywala run time error 13, a w debugerze błąd 2042 - (brak danych ???).
Błąd ten występuje w momencie analizy (kolejnego 26-stego stringu) 26 
cyfrowego numeru konta bankowego i koniec.

Mam pytanie zatem dla znawców tematu czym może być spowodowany ten błąd ?
Czy są w VBA jakieś ograniczenia wielokrotności wywoływania funkcji własnych 
? Czy każde wywołanie zajmuje "odrębne" miejsce w pamięci podręcznej i 
trzeba ją cyklicznie czyścić ?

Z góry dziękuje za wszelkie sugestie i rozwiązania.

Prot 


---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: Funkcja z regexp przy 500 wywołaniu sypie błędem 2042
#137019
Author: protmaster
Date: Sun, 11 Oct 2015 11:31
8 lines
1983 bytes
W dniu piątek, 9 października 2015 20:09:11 UTC+2 użytkownik Prot napisał:
> > 
> Z góry dziękuje za wszelkie sugestie i rozwiązania.
> 

Sprawa się wyjaśniła po analizie pliku MT940 jest w nim faktycznie 28 rekordów danych transakcji bankowych, ale ... tylko 26 z nich posiada linię z numerem kont! W dwóch rekordach - nie ma w ogóle takich linii - więc wywołania następnych submatches było oczywiście niemożliwe.

Prot
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads