fredag 14. september 2007

Leting etter valuta

Et tips til de som vil lage mer adaptive valutafinnere. Lag en stykk leter globalt (da det tar noe tid å lage et slikt objekt):
    Dim valutaMoenster As String = "^(?<valutakode>\w{3})\s+(?<kurs>\d*,?\d*)"
    Dim valutaLeter As Regex = New Regex(valutaMoenster)
    Dim treff As Match
Bruk leteren hver gang du er i tvil:
  Do While Not fil.EndOfStream()
      Dim s As String = fil.ReadLine()
      treff = valutaLeter.Match(s.Trim()) ' fjerner innledende blanke
      If treff.Success Then
          s = treff.Result("${valutakode} ${kurs}")
          cboValutakursMeny.Items.Add(s)
      End If
  Loop
Mønsteret består av:
  • "^": (ett tegn) markerer strengens start
  • "(?<valutakode>\w{3})": tre alfanumeriske (navngitt "valutakode")
  • "\s+": minst en blank
  • "(?<kurs>\d*,?\d*)": et desimaltall (navngitt "kurs"), som i "0,33", ",79" eller "3,88".
      "\d*": null eller flere siffer
    • ",?": ingen eller ett komma
    • "\d*": null eller flere siffer
Det blir ingen suksess med valutakurser som "EUR 4.2" (ikke komma), eller bare "EUR " (intet desimaltall).

Ingen kommentarer: