Lecture de fichier *.ofx

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 831 fois - Téléchargée 17 fois

Contenu du snippet

Lit le fichier et renvoit toutes les infos dans une structure.

Tester sur les fichiers OFX de Dexia Belgique et Fortis Belgique. N'hésitez pas à commenter ou m'envoyer d'autres fichiers OFX (tronquer bien sûr).

C'est ma première source, alors soyez indulgent :-)

Source / Exemple :


'------------------------------------
    'Fichiers OFX
    '------------------------------------
    Private Structure FichierOFX
        Dim ACCTID As String 'numero de compte
        Dim CURDEF As String 'devise des extraits
        Dim BANKID As String 'nom de la banque
        Dim TRNTYPE As String 'type debit/credit
        Dim DTPOSTED As Date 'date du mouvement
        Dim TRNAMT As Double 'montant
        Dim FITID As String 'numero ID
        Dim CHECKNUM As String ' numero extrait
        Dim NAME As String 'nom opération
        Dim MEMO As String ' détail de l'opération (communication)
        '<TRNTYPE>CREDIT</TRNTYPE><DTPOSTED>20100625</DTPOSTED><TRNAMT>-174,72</TRNAMT><FITID>0398</FITID><CHECKNUM>00004.0398</CHECKNUM><NAME>		COLRUYT SERAING SERAING</NAME><MEMO>ACHAT MISTER CASH AVEC CARTE N° 6703 0507 3822 0500 - COCCHIARO SANDRINE LE 25/06 19:16 COLRUYT SERAING SERAING REF. : 6667013438538 VAL. 25-06 </MEMO></STMTTRN><STMTTRN><TRNTYPE>CRED
    End Structure

    Private Function LireOFX(ByVal Filename As String) As FichierOFX()
        Dim resultat() As FichierOFX
        Dim c As Integer = -1 'compteur de résultat
        Dim txt As String = My.Computer.FileSystem.ReadAllText(Filename)
        'séparation par ligne d'opération séparée par <STMTTRN>
        Dim temp() As String = Split(txt, "<STMTTRN>")

        'la ligne 0 comprend les valeurs générales

        Dim ACCTID As Integer = temp(0).IndexOf("<ACCTID>")
        Dim compte As String = temp(0).Substring(ACCTID + 8)
        Dim length As Integer = compte.IndexOf("<")
        compte = compte.Substring(1, length - 1)

        Dim CURDEF As Integer = temp(0).IndexOf("<CURDEF>")
        Dim devise As String = temp(0).Substring(CURDEF + 8)
        length = devise.IndexOf("<")
        devise = devise.Substring(1, length - 1)

        Dim BkId As Integer = temp(0).IndexOf("<BANKID>")
        Dim bankId As String
        Dim bq As String = temp(0).Substring(BkId + 8)
        length = bq.IndexOf("<")
        bq = bq.Substring(1, length - 1)

        'traitement de chaque ligne/mouvement

        For i = 1 To temp.Count - 1
            c = c + 1
            ReDim Preserve resultat(c)
            Dim tempo As String = temp(i)
            Dim champs As Integer 'ou demarre le champs
            Dim longg As Integer 'ou s'arrete le champs
            Dim donnee As String 'le champs
            resultat(c).ACCTID = compte
            resultat(c).CURDEF = devise
            resultat(c).BANKID = bq
            'champs date
            champs = tempo.IndexOf("<DTPOSTED>")
            donnee = tempo.Substring(champs + 10)
            'donnee = Mid(tempo, champs + 10)
            donnee = donnee.Substring(1, 8)
            donnee = donnee.Substring(7, 2) & "/" & donnee.Substring(5, 2) & "/" & donnee.Substring(1, 4)
            resultat(c).DTPOSTED = CDate(donnee)
            donnee = tempo
            'champ numero
            champs = tempo.IndexOf("<CHECKNUM>")
            donnee = tempo.Substring(champs + 10)
            longg = donnee.Substring("<") - 1
            donnee = donnee.Substring(1, longg)
            resultat(c).CHECKNUM = donnee
            'champ numero
            champs = tempo.IndexOf("<FITID>")
            donnee = tempo.Substring(champs + 7)
            longg = donnee.IndexOf("<") - 1
            donnee = donnee.Substring(1, longg)
            resultat(c).FITID = donnee

            'champ TRNAMT montant
            champs = tempo.IndexOf("<TRNAMT>")
            donnee = tempo.Substring(champs + 8)
            longg = donnee.IndexOf("<") - 1
            donnee = donnee.Substring(1, longg)
            resultat(c).TRNAMT = CDbl(donnee)
            'champs NAME
            champs = tempo.IndexOf("<NAME>")
            donnee = tempo.Substring(champs + 6)
            longg = donnee.IndexOf("<") - 1
            donnee = donnee.Substring(1, longg)
            resultat(c).NAME = donnee.Trim()

            'champ TRNTYPE 
            champs = tempo.IndexOf("<TRNTYPE>")
            donnee = tempo.Substring(champs + 9)
            longg = donnee.IndexOf("<") - 1
            donnee = donnee.Substring(1, longg)
            resultat(c).TRNTYPE = donnee

            'champ MEMO 
            champs = tempo.IndexOf("<MEMO>")
            donnee = tempo.Substring(champs + 6)
            longg = donnee.IndexOf("<") - 1
            donnee = donnee.Substring(1, longg)
            resultat(c).MEMO = donnee.Trim()

        Next

        Return resultat

    End Function

A voir également

Ajouter un commentaire

Commentaires

Messages postés
11
Date d'inscription
mercredi 23 avril 2008
Statut
Membre
Dernière intervention
6 août 2015

Merci pour cette souces qui m'est fort utile.
Une remarque cependant : il est dommage qu'elle ne prenne pas en compte un fichier OFX avec plusieurs compte bancaire dedans.
Messages postés
1
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 août 2010

merci pour l'info, je n'étais pas au courant, j'y penserai pour l'avenir.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
C'est pas vraiment ce que j'appelle du Dotnet moi ... T'es au courant que les fonctions Mid, InStr, Trim, CDbl, CDate et Split viennent de VB6 et qu'il faut utiliser les fonctions taChaine.Substring ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.