torsdag 6. september 2007

Fredag 7/9: Leting etter tall

Data kommer ofte som tekst (String), hvorfra en henter ut (filtrerer) etter behov. En leter da etter mønster (pattern) i teksten, f.eks. en akseptabel temperatur. Vi kan bruke IndexOf() og SubString() som i boken, men det kraftigste og mest brukte redskap er regulære uttrykk (regular expressions), noe boken ikke tar opp. For heltall er letemønstret "\d+" noe som tilsvarer "[0123456789]+" eller, noe enklere skrevet, "[0-9]+". Plusstegnet er en KVANTIFIKATOR som angir at en vil ha minst ett av tegnene foran. Kodeeksempel:
  Imports System.Text.RegularExpressions 

  Function finn_IkkeNegativtHeltall (ByVal strInn As String) As Integer
    Dim strMoenster as String = "\d+"
    Dim tallLeter as RegEx = new RegEx (strMoenster)
    Dim treff as Match
    Dim strTall as String

    treff = tallLeter.Match( strInn )
    strTall = treff.ToString ()
    If IsNumeric ( strTall ) Then
      Return CInt ( strTall )
    Else
      Return -1
    End If
  End Function
For å hente alle tallene brukes en løkke (noe vi ikke har lært om enda) som går gjennom en treffliste, som under. "Ut" viser tallene atskilt med blank:
  Dim alletreff as MatchCollection
  alletreff = tallLeter.Matches ( strInn )
  For Each treff In alletreff
    Ut.Text = Ut.Text & treff.ToString() & " "
  Next
For å tillate negative tall setter en inn "-?" foran: "?" betyr at en vil ha null eller ett av foregående tegn ("-"). Hele mønsteret blir da "-?\d+". Hvis en bare vil akseptere heltall etterfulgt av "c", som i "-13c" blir mønsteret "-?\d+c". Tre kvantifikatorer er: "+" (1 eller flere), "?" (ingen eller 1) og "*" (0 eller flere).

Ingen kommentarer: