Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Stringfunktionen

Komplexe Suchfunktion (regular expressions)

Lizenz:Erster Autor:Letzte Bearbeitung:
GPLv3MitgliedTJF 24.09.2014

Die Suche nach Zeichenketten kann mit den FB-Befehlen BefehlsreferenzeintragINSTR bzw. BefehlsreferenzeintragINSTRREV programmiert werden, zumindest für den Fall, dass exakte Übereinstimmung der gesuchten Zeichenkette gefordert ist.

Nicht selten kommt es jedoch vor, dass bestimmte Teile der gesuchten Zeichenkette flexibel sein sollen. So könnte z. B. nur nach Wörtern gesucht werden, an deren Ende eine einzige Ziffer steht, oder mehrere Ziffern, oder in deren Mitte mindestens ein Unterstrich vorhanden ist oder die nur aus Großbuchstaben bestehen. Diese Aufgaben lassen sich mit den "Bordmitteln" von FreeBasic nicht so einfach lösen. Vielmehr bietet sich hier die Verwendung von Externer Link!reglären (Such-) Ausdrücken an, die aus der textorientierten Programmiersprache PERL bekannt sind.

In FB können reguläre Ausdrücke durch Einbindung externer Bibliotheken verfügbar gemacht werden, z. B. unter Verwendung von Externer Link!GLib. Das folgende Beispiel lädt die Datei g_regex.bas in den Speicher und durchsucht diese mithilfe des regulären Ausdruckes

"\b[A-Z]+\b"

nach Wörtern, die ausschließlich aus Großbuchstaben bestehen. Diese werden dann auf dem Bildschirm ausgegeben. Wird der Quelltext also unter dem Namen g_regex.bas abgespeichert, kompiliert und ausgeführt, so analysiert das Programm seinen eigenen Quelltext und gibt alle Wörter aus, die in Großbuchstaben geschrieben sind.

'/* Print all uppercase-only words. */
'
' Example translated from GLib Reference Manual
' by TJF, licence GPLv3
'

#INCLUDE ONCE "glib.bi"

SUB print_uppercase_words CDECL( _
  BYVAL string_ AS CONST gchar PTR)

  VAR regex = g_regex_new ("\b[A-Z]+\b", 0, 0, NULL)
  DIM AS GMatchInfo PTR match_info
  DIM AS GError PTR error_ = NULL
  g_regex_match_full (regex, string_, -1, 0, 0, @match_info, @error_)
  WHILE g_match_info_matches (match_info)
    VAR word = g_match_info_fetch (match_info, 0)
    g_print (!"Found: %s\n", word)
    g_free (word)
    g_match_info_next (match_info, @error_)
  WEND
  g_match_info_free (match_info)
  g_regex_unref (regex)
  IF error_ THEN
    g_printerr (!"Error while matching: %s\n", error_->message)
    g_error_free (error_)
  END IF
END SUB

VAR filen = "g_regex.bas", fnr = FREEFILE
IF OPEN(filen FOR INPUT AS #fnr) THEN
  ?"Cannot open " & filen
ELSE
  VAR t = STRING(LOF(fnr), 0)
  GET #fnr, , t
  CLOSE #fnr
  print_uppercase_words(SADD(t))
END IF

Hinweis für wondiws Anwender:

Die Binaries (GLib.dll) können an einfachsten mit einem GTK-Installer geladen bzw. installiert werden:

Externer Link!http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 29.09.2012 von MitgliedTJF angelegt.
  • Die aktuellste Version wurde am 24.09.2014 von MitgliedTJF gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen