ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 03.08.2000

Diese Seite wurde zuletzt aktualisiert am 03.08.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Umlaute ausschreiben

Zurück...


Anzeige

(-hg) mailto:hg_convertchars@aboutvb.de

Trotz internationaler Zeichensätze ist es nach wie vor manchmal notwendig, Umlaute in einem deutschsprachigen Text auszuschreiben - statt "ä" wird "ae", statt "ö" wird "oe" usw. geschrieben. Etwa hin und wieder im Email-Verkehr und in einer ganzen Reihe von Newsgroups und Mail-Listen ist die Ausschreibung eine immer noch gepflegte Gewohnheit. Eine Funktion, die die Konvertierung der Umlaute nachträglich und automatisch vornimmt, wäre da sicher ganz praktisch.

Auf den ersten Blick scheint das kein sonderlich großes Problem zu sein. Schließlich gibt es ab Visual Basic 6 die Funktion MSDN Library - VB ReplaceReplace, mit der Sie bequem ein Zeichen oder eine Zeichenfolge gegen ein anderes Zeichen bzw. gegen eine Zeichenfolge austauschen können (für Visual Basic 5 müssen Sie allerdings eine solche Funktion erst noch selber schreiben).

Ganz so einfach ist die Angelegenheit jedoch nicht. Denn tauschen Sie ein "Ä" gegen "AE" aus, gibt das nur AErger. Falls Sie nun aber, um diesen Lapsus zu vermeiden, ganz clever das "Ä" gegen "Ae" tauschen wollen, handeln Sie sich damit auch nur wieder AeRGER ein. Die elegante Replace-Funktion hilft uns hier also nicht weiter - wir brauchen für diesen Zweck eine eigene Funktion, die Funktion ConvertChars.

Sie übergeben ihr den zu konvertierenden Text und ein Array mit den zu tauschenden Zeichen-Paaren. Das Array ist ein einfaches Variant-Array, damit die Zusammenstellung der Zeichen-Paare einfacher wird und sich die Dimensioniererei erübrigt. Der Aufruf, der die Umlaute ausschreibt und das "ß" in ein "ss" umwandelt, sähe beispielsweise so aus:

Dim nText As String
Dim nPairs As Variant
Dim nTextConverted As String
  
nText = "Übler Ärger mit Glockengeläut, der in der Öffentlichkeit" _
 & " öfters das erträgliche Maß übersteigt"
nPairs = Array("Ä", "Ae", "Ö", "Oe", "Ü", "Ue", "ä", "ae", _
 "ö", "oe", "ü", "ue", "ß", "ss")
nTextConverted = ConvertChars(nText, nPairs)

Sie können natürlich statt "ss" auch "sz" wählen - diese Ausschreibungskonvention ist ebenfalls hin und wieder anzutreffen.

Private Declare Function IsCharAlpha Lib "user32" _
 Alias "IsCharAlphaA" (ByVal cChar As Byte) As Long
Private Declare Function IsCharUpper Lib "user32" _
 Alias "IsCharUpperA" (ByVal cChar As Byte) As Long

Public Function ConvertChars(Text As String, Pairs As Variant) _
 As String

  Dim nText As String
  Dim i As Integer
  Dim nPos As Long
  Dim nStart As Long
  Dim nLen As Integer
  Dim nTestChar As Long
  Dim nUCase As Boolean
  
  nText = Text
  For i = 0 To UBound(Pairs) - 1 Step 2
    nLen = Len(Pairs(i))
    nStart = 1
    Do
      nPos = InStr(nStart, nText, Pairs(i))
      If nPos Then
        nTestChar = Asc(Mid$(nText, nPos + nLen, 1))
        If IsCharAlpha(nTestChar) Then
          If IsCharUpper(nTestChar) Then
            nUCase = True
          End If
        Else
          nTestChar = Asc(Mid$(nText, nPos - 1, 1))
          If IsCharAlpha(nTestChar) Then
            If IsCharUpper(nTestChar) Then
              nUCase = True
            End If
          Else
            UCase = True
          End If
        End If
        If nUCase Then
          nText = Left$(nText, nPos - 1) & UCase$(Pairs(i + 1)) _
           & Mid$(nText, nPos + nLen)
        Else
          nText = Left$(nText, nPos - 1) & Pairs(i + 1) _
           & Mid$(nText, nPos + nLen)
        End If
        nStart = nPos + Len(Pairs(i + 1))
      Else
        Exit Do
      End If
    Loop
  Next 'i
  ConvertChars = nText
End Function

Diese Funktion greift auf die beiden API-Funktion MSDN Library - API IsCharAlphaIsCharAlpha (siehe auch Alpha(numerisch) oder nicht?"Alpha(numerisch) oder nicht?") und MSDN Library - API IsCharUpperIsCharUpper zurück. Mit IsCharAlpha wird zunächst geprüft, ob das auf das zu tauschende Zeichen nachfolgende Zeichen ein Buchstabe ist, um diesen nun wieder mit IsCharUpper hin auf Großschreibung hin zu prüfen. Ist nämlich der nachfolgende Buchstabe ein Großbuchstabe, hat auch die Ausschreibung des Umlauts in Großbuchstaben zu erfolgen, da mit größter Wahrscheinlichkeit das ganze Wort in Großbuchstaben geschrieben ist. Für den Fall, dass das nachfolgende Zeichen kein auf Großschreibung prüfbarer Buchstabe sein sollte, wird das vorhergehende Zeichen geprüft (Mir fällt allerdings auf Anhieb nur ein einziges deutsches "Wort" ein, das mit einem Umlaut endet, nämlich das Kutscherkommando "Hü" - kennen Sie vielleicht noch andere?). Sollte ein Großbuchstaben-Umlaut solo stehen (warum auch immer...), wird er natürlich auch komplett in Großbuchstaben ausgeschrieben.

An den Rückwärtsgang sollten Sie allerdings keinen Gedanken verschwenden. Ohne Nachschlage-Wörterbuch und intelligente Kontext-Analyse dürfte es nämlich unmöglich sein, die Rückwandlung von "MASSEN" in Maßen und nicht in Massen zu bewerkstelligen, und die im Qücksilber laürnden Gefahren haben mit  Pösie wohl nur recht wenig zu tun...


Modul und Beispiel-Projekt ConvertChars (convertchars.zip - ca. 3,1 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer