vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Tipp: Auslesen der aktuellen Währungskurse der ECB 
Autor: ModeratorDieter (Moderator)
Datum: 28.09.09 08:46

Hab' den Code mal in eine VB6-Klasse CurrencyRate umgeschrieben:
Option Explicit
 
' Private Members
Private m_Sender As String
Private m_Date As Date
Private m_Count As Long
 
Private oList As Collection
 
' Benötigte API-Funktionen
Private Declare Function URLDownloadToFile Lib "urlmon" _
  Alias "URLDownloadToFileA" ( _
  ByVal pCaller As Long, _
  ByVal szURL As String, _
  ByVal szFileName As String, _
  ByVal dwReserved As Long, _
  ByVal lpfnCB As Long) As Long
 
Private Declare Function DeleteUrlCacheEntry Lib "wininet.dll" _
  Alias "DeleteUrlCacheEntryA" ( _
  ByVal lpszUrlName As String) As Long
 
 
' Datei-Download mit oder ohne Leerung des URL-Cache
Private Function FileDownload(ByVal sURL As String, _
  ByVal sLocalFile As String, _
  Optional ByVal bClearCache As Boolean = True) As Boolean
 
  Dim lResult As Long
 
  ' URL-Cache leeren?
  If bClearCache Then
    lResult = DeleteUrlCacheEntry(sURL)
  End If
 
  ' Download ausführen
  Screen.MousePointer = vbHourglass
  lResult = URLDownloadToFile(0, sURL, sLocalFile, 0, 0)
  Screen.MousePointer = vbNormal
 
  FileDownload = (lResult = 0)
End Function
 
Private Sub Class_Initialize()
  ' Collection erstellen
  Set oList = New Collection
End Sub
 
Private Sub Class_Terminate()
  ' Objekte zerstören
  Set oList = Nothing
End Sub
 
' Download der XML-Datei mit den Währungskursen
' und Auslesen der Datei
Public Function ReadCurrencyRates() As Boolean
  Dim sURL As String
  Dim sFile As String
  Dim bResult As Boolean
 
  sURL = "http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml"
  sFile = App.Path & "\eurofxref-daily.xml"
 
  Set oList = New Collection
  m_Count = 0
 
  If FileDownload(sURL, sFile) Then
    ' jetzt die XML-Datei auslesen
    Dim F As Integer
    Dim sData As String
    Dim sCurr As String
    Dim sBuffer As String
    Dim sLine() As String
    Dim i As Long
 
    F = FreeFile
    Open sFile For Binary As #F
    sBuffer = Space$(LOF(F))
    Get #F, , sBuffer
    Close #F
 
    sLine() = Split(sBuffer, Chr$(10))
    For i = 0 To UBound(sLine)
      sLine(i) = Trim$(Replace(sLine(i), vbTab, ""))
      If Left$(LCase$(sLine(i)), 13) = "<gesmes:name>" Then
        ' Sender
        m_Sender = XMLData(sLine(i), "gesmes:name")
      Else
        If LCase$(Left$(sLine(i), 6)) = "<cube " Then
          sLine(i) = Mid$(sLine(i), 7)
 
          If Left$(sLine(i), 5) = "time=" Then
            ' Datum/Zeit
            m_Date = CDate(XMLAttr(sLine(i), "time"))
 
          ElseIf Left$(sLine(i), 9) = "currency=" Then
            ' Währungskurs
            sCurr = XMLAttr(sLine(i), "currency")
            sData = sCurr & ";" & XMLAttr(sLine(i), "rate")
 
            oList.Add sData, sCurr
            m_Count = m_Count + 1
          End If
        End If
      End If
    Next i
    bResult = True
  End If
 
  On Error Resume Next
  Kill sFile
  On Error GoTo 0
 
  ReadCurrencyRates = bResult
End Function
 
' Hilfsfunktion
Private Function XMLData(ByVal sXML As String, ByVal sTag As String) As String
  Dim nPos As Long
  Dim sData As String
 
  nPos = InStr(1, sXML, "<" & sTag & ">", vbTextCompare)
  If nPos > 0 Then
    sData = Mid$(sXML, Len(sTag) + 3)
    nPos = InStr(1, sData, "</" & sTag & ">", vbTextCompare)
    If nPos > 0 Then
      XMLData = Left$(sData, nPos - 1)
    End If
  End If
End Function
 
' Hilfsfunktion
Private Function XMLAttr(ByVal sXML As String, ByVal sAttr As String) As String
  Dim nPos As Long
  Dim sData As String
 
  nPos = InStr(1, sXML, sAttr & "=", vbTextCompare)
  If nPos > 0 Then
    sData = Mid$(sXML, nPos + Len(sAttr) + 2)
    nPos = InStr(sData, "'")
    If nPos > 0 Then
      XMLAttr = Left$(sData, nPos - 1)
    End If
  End If
End Function
 
' Gibt das Währungskürzel zurück
Public Property Get CurrencyCode(ByVal Index As Long) As String
  Dim sData() As String
  sData = Split(oList(Index), ";")
  CurrencyCode = sData(0)
End Property
 
' Gibt den Umrechnungskurs zurück
Public Property Get CurrencyRate(ByVal IndexOrKey As Variant) As Double
  Dim sData() As String
  sData = Split(oList(IndexOrKey), ";")
  CurrencyRate = Val(sData(1))
End Property
 
' Gibt die Anzahl der vorhandenen Umrechnungskurse zurück
Public Property Get Count() As Long
  Count = m_Count
End Property
 
' Gibt den Namen des Senders zurück
Public Property Get Sender() As String
  Sender = m_Sender
End Property
 
' Gibt das Datum der Umrechnungskurse zurück
Public Property Get Time() As String
  Time = m_Date
End Property
 
' Gibt die Währungsbezeichnung zurück
Public Property Get CurrencyName(ByVal sCode As String) As Variant
  Select Case sCode
    Case "DKK": CurrencyName = "Dänemark;Danish Krone"
    Case "EUR": CurrencyName = "EU;Euro"
    Case "USD": CurrencyName = "USA;US Dollar"
    Case "GBP": CurrencyName = "Großbritannien;Pound Sterling"
    Case "SEK": CurrencyName = "Schweden;Swedish Krona"
    Case "NOK": CurrencyName = "Norwegen;Norwegian Krona"
    Case "CNY": CurrencyName = "China;Chinese Yuan Renminbi"
    Case "ISK": CurrencyName = "Island;Icelandic Krona"
    Case "IDR": CurrencyName = "Indonesien;Indonesian Rupiah"
    Case "CHF": CurrencyName = "Schweiz;Swiss franc"
    Case "CAD": CurrencyName = "Kanada;Canadian Dollar"
    Case "JPY": CurrencyName = "Japan;Japanese Yen"
    Case "RUB": CurrencyName = "Russland;Russian Rouble"
    Case "HRK": CurrencyName = "Kroatien;Croatian Kuna"
    Case "MYR": CurrencyName = "Malaysia;Malaysian Ringgit"
    Case "PHP": CurrencyName = "Philippinen;Philippine Peso"
    Case "THB": CurrencyName = "Thailand;Thai Baht"
    Case "AUD": CurrencyName = "Australien;Australian Dollar"
    Case "NZD": CurrencyName = "Neuseeland;New Zealand Dollar"
    Case "EEK": CurrencyName = "Estland;Estonian Kroon"
    Case "LVL": CurrencyName = "Lettland;Latvian Lats"
    Case "LTL": CurrencyName = "Litauen;Lithuanian Litas"
    Case "PLN": CurrencyName = "Polen;Polish Zloty"
    Case "CZK": CurrencyName = "Tschechien;Czech Koruna"
    Case "HUF": CurrencyName = "Ungarn;Hungarian Forint"
    Case "HKD": CurrencyName = "Hongkong;Hong Kong Dollar"
    Case "SGD": CurrencyName = "Singapur;Singapore Dollar"
    Case "SDR": CurrencyName = "Spezial;Special Drawing Rights"
    Case "BGN": CurrencyName = "Bulgarien;Bulgarian Lev"
    Case "CYP": CurrencyName = "Zypern;Cypriotic Pund"
    Case "MTL": CurrencyName = "Malta;Maltesic Lira"
    Case "ROL": CurrencyName = "Rumänien;Romanian Leu"
    Case "SIT": CurrencyName = "Slowenien;Slovenscy Tolar"
    Case "SKK": CurrencyName = "Slowakei;Slovakic Koruna"
    Case "TRY": CurrencyName = "Türkei;Turkish Lira"
    Case "KRW": CurrencyName = "Südkorea;South Korean Won"
    Case "ZAR": CurrencyName = "Südafrika;South African Rand"
    Case "BRL": CurrencyName = "Brasilien;Brasilian Real"
    Case "IDR": CurrencyName = "Indonesien;Indonesian Rupiah"
    Case "INR": CurrencyName = "Indien;Indian Rupee"
    Case "MXN": CurrencyName = "Mexiko;Mexican Peso"
  End Select
End Property
Aufruf:
Dim cRate As New CurrencyRate
With cRate
  If .ReadCurrencyRates() Then
    List1.Clear
 
    Dim i As Long
    For i = 1 To .Count
      List1.AddItem .CurrencyCode(i) & " --> " & .CurrencyRate(i) & _
        " (" & .CurrencyName(.CurrencyCode(i)) & ")"
    Next i
  End If
End With
Set cRate = Nothing

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tipp: Auslesen der aktuellen Währungskurse der ECB990luet27.09.09 17:45
Re: Tipp: Auslesen der aktuellen Währungskurse der ECB851ModeratorDieter28.09.09 08:46
Re: Tipp: Auslesen der aktuellen Währungskurse der ECB626luet28.09.09 09:28

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel