Lecture de fichier *.ofx

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

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.