TextKonverter

Zahlenformat von CSV-, XML- oder anderen Daten ändern

Hinweis

Die auf dieser Seite beschriebene Funktionalität wird erst mit dem nächsten TextKonverter-Release verfügbar sein. Möchten Sie die Funktion schon vorher ausprobieren, können Sie sich gerne bei uns melden.

In diesem Tutorial möchten wir uns ansehen, wie sich beliebige Ausgangszahlen in CSV- und XML-Dateien oder Texten in ein anderes numerisches Format konvertieren lassen. Wir nutzen dazu die Zahlenformat-Funktionen, die Sie rechts in den Aktionen des TextKonverters unter CSV > Zahlenformat sowie XML > Zahlenformat finden. Im letzten Abschnitt zeigen wir Ihnen darüber hinaus einen Weg, wie Sie die Zahlenformatierung auch außerhalb von CSV- oder XML-Strukturen innerhalb beliebiger sonstiger Texte oder Textdateien anwenden können.

Das Tutorial gliedert sich in die folgenden dreizehn Abschnitte:

Funktionsweise

Ihr gewünschtes Format geben Sie über einen sogenannten Format-String an. Dieser Format-String ist eine Zeichenkette, die schematisch und strukturell Ihrer gewünschten Ziel-Formatierung der Zahl entspricht. Die verschiedenen Möglichkeiten und Variationen dieses Format-Strings sowie zahlreiche Beispiele für Konvertierungen sehen wir uns in den nächsten Abschnitten an.

Zusätzlich ist es möglich, Informationen über die ursprüngliche Zahlenformatierung bezüglich des im Ursprungsformat verwendeten Dezimal- und Tausendertrennzeichens zu spezifizieren. Dies ist jedoch nicht zwingend erforderlich, da in den meisten Fällen bereits die automatische Erkennung zu dem gewünschten Ergebnis führen wird. Dennoch gibt es uneindeutige Fälle, deren Auflösung eine Spezifizierung nötig macht. Diese wollen wir im Abschnitt "Automatische Erkennung oder benutzerdefinierte Trennzeichen" im Anschluss an die Format-String-Erläuterungen diskutieren.

Über diese formatspezifischen Angaben hinaus, müssen Sie zusätzlich angeben, in welchen Bereichen beziehungsweise Teilen Ihres Textes oder Ihrer Textdateien die Formatierung angewendet werden soll. Bei der Formatierung von CSV-Daten können Sie entsprechend angeben, in welchen Zeilen und Spalten die Zahlen formatiert werden sollen. Im Falle der Änderung von XML-Dateien können Sie dagegen die CSS-typischen Selektoren nutzen, um die Konvertierung auf bestimmte innere Texte oder Attribute der XML-Struktur zu beschränken. Und wenn Sie Zahlen in anderen textbasierten Datenstrukturen oder innerhalb von Fließtext formatieren möchten, nutzen Sie bitte die Möglichkeiten der Referenzen, die im letzten Abschnitt dieses Tutorials erläutert werden.

Ganze Zahlen

Eine einfache ganze Zahl ohne Nachkommastellen, führende Nullen oder Tausendertrennzeichen können Sie mit dem simplen Format-String "0" erzeugen. Unabhängig von der Ausgangszahl werden bei der Verwendung von "0" sämtliche Zusätze der ursprünglichen Zahl entfernt und diese auf eine Ganzzahl reduziert.

Format112,341 234100 %$4.90
011212341005

Das heißt, Zahlen wie "1", "100" und "1000" bleiben als "1", "100" und "1000" bestehen, da diese Zahlen bereits ganze Zahlen sind, während Dezimalzahlen gerundet und Tausendertrennzeichen entfernt werden. "1,23" wird damit zum Beispiel zu "1", "1.9" nach Rundung auf ganze Zahlen zur "2" und die mit französischen Tausendertrennzeichen ausgegebene Zahl "1 000 000" zu "1000000". Auch Währungsangaben, Prozentzeichen oder andere Zusätze wie Längeneinheiten, Gewichtsangaben oder sonstiger Text werden mit dem Format-String "0" entfernt. So wird zum Beispiel "10 GB" zu "10", "1 Euro" zu "1" oder "USD 1,000.00" zu "1000".

Dezimalzahlen

Kommazahlen können Sie über zwei Erweiterungen des Basis-Format-Strings "0", den wir im letzten Abschnitt kennengelernt haben, erzeugen. Zum einen können Sie ein beliebiges Zeichen als Dezimaltrenner hinten an die "0" anhängen, zum anderen steuern Sie die Anzahl der ausgegebenen Nachkommastellen durch die Anzahl anschließend nach dem Dezimaltrennzeichen angehängter Nullen.

Mit dem Format-String "0,0" erzeugen Sie demnach beispielsweise eine Kommazahl mit einer einzelnen Nachkommastelle und einem Komma als Dezimaltrenner, mit "0.00" verwenden Sie den Punkt als Dezimaltrenner und geben die Zahlen mit zwei Nachkommastellen aus. Wenn Sie die Felder Ihrer CSV-Daten mit einem Komma separieren, bietet sich ein Format mit einem Punkt an, wenn Sie ein Semikolon oder Tabs (TSV) nutzen, lassen sich beide Arten verwenden ohne dass die Felder mit Anführungszeichen versehen werden müssten um Feldtrennzeichen eindeutig von den Zahlen unterscheiden zu können.

Neben dem Punkt und dem Komma können Sie auch beliebige andere Zeichen als Dezimaltrenner verwenden. Zum Beispiel den maritimen Unterstrich oder das geschützte Leerzeichen, um Zahlen am Zeilenende nicht auseinanderzureißen, aber auch beliebige sonstige Unicode-Zeichen Ihrer Wahl. Selbst Trenner bestehend aus mehreren gleichen oder verschiedenen Zeichen sind möglich. So konvertiert der Format-String "0//00" beispielsweise Zahlen wie "1", "1,23" oder "10.5" zu "1//00", "1//23" und "10//50".

Wieder werden auch bei der Dezimalzahl-Konvertierung von der ursprünglichen Zahl Tausendertrennzeichen und alle Zusatzzeichen entfernt sowie die Eingangszahl gegebenenfalls gerundet wenn sie mehr Stellen als die geforderten Nachkommastellen umfasst. In der folgenden Tabelle finden Sie einige Beispiele für das Ergebnis verschiedener Ausgangszahlen (in den Spalten) für unterschiedliche Format-Strings (in den Zeilen).

Format11,21.2340,10,5
011101
0,01,01,21,20,10,5
0.01.01.21.20.10.5
0,001,001,201,230,100,50
0’0001’0001’2001’2340’1000’500
0~/001~/001~/201~/230~/100~/50
.01.01.21.2.1.5
,001,001,201,23,10,50

Ein Sonderfall markiert die Definition eines Format-Strings gänzlich ohne führende Nullen. Also zum Beispiel ".0" oder ",0". Damit lässt sich die Ausgabe einer Zahl in der hauptsächlich im englischen Sprachraum verbreiteten Dezimalzahl-Schreibweisen-Variante ohne Integer-Part realisieren, sofern dieser Null beträgt und damit keinerlei Informationsgehalt mit sich bringt. Mit ".0" würde die Zahl "0,5" entsprechend zu ".5" konvertieren während Zahlen größer gleich 1 mit ihrem Ganzzahl-Part stehen bleiben wie beispielsweise "1.5". Natürlich werden derart formatierte Zahlen auch im Eingangstext ihrer CSV- oder XML-Daten als solche erkannt und gegebenenfalls von der Funktion weiterverarbeitet.

Führende Nullen

Wenn Sie mehrere Nullen ohne Dezimaltrennzeichen hintereinander schreiben oder Nullen links von Ihrem gewählten Dezimaltrennzeichen anhängen, können Sie damit führende Nullen erzeugen. Wieder steuern Sie die Anzahl der führenden Nullen - genau wie auch bei den Nachkommastellen - über die Anzahl der aneinander gereiten Nullen.

Mit dem Format-String "000" bringen Sie Ihre Zahlen demnach zum Beispiel auf eine Mindestlänge von 3 Zeichen durch führende Nullen während längere Zahlen natürlich nicht gekürzt werden sondern erhalten bleiben. "1" würde damit zu "001", "10" zu "010", "100" bliebe "100" und "1000" bliebe ebenfalls "1000" (wie auch alle Zahlen mit noch mehr Stellen unverändert blieben), da letztere Zahlen jeweils die Länge von drei Zeichen überschreiten, was die führenden Nullen in diesem Fall überflüssig macht.

Format110100100012,34
0110100100012
000110100100012
0000010101001000012
000000010010010010000012
000000000100010001000100000012
00.0001.0010.00100.001000.0012.34
000.0001.0010.0100.01000.0012.3
000,00001,00010,00100,001000,00012,34

Auch die Kombination von einer fixen Anzahl von Nachkommastellen und führender Nullen ist möglich. Der Format-String "0000,00" kombiniert als Beispiel vier führende Nullen mit zwei Nachkommastellen. Die ursprüngliche Zahl "1" würde mit diesem Format-String zu "0001,00" konvertiert, "12,123" zu "0012,12" und "10 000" zu "10000,00".

Tausendertrennzeichen

Auch Tausendertrennzeichen lassen sich über den Format-String definieren. Hierbei ist zu unterscheiden, ob die Tausendertrennzeichen mit oder ohne führende Nullen angewendet werden sollen. Entsprechend müssen die Tausendertrennzeichen entweder inmitten der Anzahl führender Nullen definiert werden oder mit dem auf Optionalität hinweisenden Hilfszeichen # falls die führenden Nullen nicht so weit reichen sollen wie das Vorkommnis des ersten Tausender-Separators.

Ein Beispiel für die Definition eines Tausendertrennzeichens ist der Format-String "#.###", der die Zahlen "1", "10", "100", "1000", "10000", "100000" und "1000000" zu "1", "10", "100", "1.000", "10.000", "100.000" und "1.000.000" konvertiert. Das Zeichen # bedeutet hier, dass die damit gekennzeichneten Stellen innerhalb der Zahl nur dann ausgeschrieben werden sollen, falls die betreffende Zahl auf natürliche Weise die Länge mindestens einer Tausendertrennzeichenstelle erreicht. Über die erste Tausenderstelle hinausgehende Tausenderstellen wie die von einer Million ("1.000.000") oder einer Milliarde ("1.000.000.000") müssen nicht explizit im Format-String spezifiziert werden und ergeben sich automatisch. Es reicht also aus, im Format-String nur das erste Tausendertrennzeichen anzugeben (auch wenn größere Zahlen zu erwarten sind).

Format1100100010000001234,56
#.###11001.0001.000.0001.235
#,###11001,0001,000,0001,235
# ###11001 0001 000 0001 235
#'###11001'0001'000'0001'235

Sollen dagegen führende Nullen und Tausendertrennzeichen kombiniert werden, können Sie die gewünschten Stellen einfach mit Nullen statt mit dem #-Zeichen ausführen. So ergeben beispielsweise die Zahlen "1", "10" und "1000" mit dem Format-String "0 000." eine Ausgabe von "0 001", "0 010" sowie "1 000".

Format1100100010000001234,56
0 0001 000100 0001000 0001000000 0001234 560
0 000.0 0010 1001 0001 000 0001 235
0 000,0 0010 1001 0001 000 0001 235
0,000.0,0010,1001,0001,000,0001,235
0.000,0.0010.1001.0001.000.0001.235
#'#00011001'0001'000'0001'235
#.000,0011001.0001.000.0001.235

Wichtig ist hier, dass wir nicht einfach nur "0 000" schreiben, sondern auch wenn wir keine Nachkommastellen wünschen, am Ende ein Zeichen als "virtuellen" Dezimaltrenner anhängen. Dabei ist es egal, ob wir "0 000.", "0 000," oder ein anderes Zeichen verwenden, da dieses Zeichen später in der Ausgabe sowieso nicht ausgeschrieben wird. Würden wir diesen virtuellen Dezimaltrenner weglassen, wäre unklar, ob es sich bei einem Format-String wie "0.000" um eine Dezimalzahl mit drei Nachkommastellen oder um eine Ganzzahl mit Tausendertrenner handelt. Dieser Unterschied wird in den ersten drei Beispielen in der Tabelle über diesem Abschnitt verdeutlicht. Sofern mindestens ein #-Zeichen vor unserem Tausendertrennzeichen vorkommt, benötigen wir dagegen kein virtuelles Dezimaltrennzeichen, da in diesem Fall keine Uneindeutigkeit besteht. Ein Format-String wie "#.#00" benötigt also trotz der Definition zweier führender Nullen kein angehängtes Zeichen, ein Format-String wie "# 000." dagegen schon.

Format1100100010000001234,56
#,###.01.0100.01,000.01,000,000.01,234.6
#.###,001,00100,001.000,001.000.000,001.234,56
0 000,00 001,00 100,01 000,01 000 000,01 234,6
0,000.0000,001.0000,100.0001,000.0001,000,000.0001,234.560
000 000,000000 001,000000 100,000001 000,0001 000 000,000001 234,560
#’###•0001•000100•0001’000•0001’000’000•0001’234•560
#--###-:01-:0100-:01--000-:01--000--000-:01--234-:6

Auch lassen sich die Tausendertrennzeichen mit beliebig vielen Nachkommastellen kombinieren. Der Format-String "#.###,00" formatiert Zahlen beispielsweise mit dem Punkt als Tausendertrennzeichen und dem Komma als Dezimaltrennzeichen ("1000" wird damit zu "1.000,00") während "# ###.0" die Zahlen mit dem Punkt als Dezimaltrenner und dem Leerzeichen als Tausendertrennzeichen sowie einer einzigen Nachkommmastelle konvertiert ("1000" würde mit diesem Format-String entsprechend zu "1 000.0").

Desweiteren können wir auch als Tausendertrenner - genauso wie auch für den Dezimaltrenner - nicht nur einzelne sondern auch mehrere beliebige Zeichen (inklusive Unicode-Zeichen) verwenden. Wir sind im TextKonverter also nicht auf die üblichen Tausendertrennzeichen Punkt, Komma, Bindestrich und Apostroph beschränkt. Beispiele dafür sehen Sie in den letzten beiden Zeilen der letzten Tabelle.

Andere Zahlengruppierungen

Neben den klassischen Tausendertrennungen, die wir im letzten Abschnitt kennengelernt haben und mit denen Zahlen typischerweise in Dreiergruppen eingeteilt werden, ist es mit dem TextKonverter auch möglich, Gruppierungen beliebiger anderer Größe vorzunehmen.

Hierzu müssen wir lediglich die Position unseres "Tausendertrennzeichens" in unserem Format-String an unsere gewünschte Gruppengröße anpassen. Während wir also mit "#.###" Dreiergruppen produzieren (die Zahl "123456" wird zu "123.456" können wir ensprechend mit "#.##" Zweiergruppen erstellen ("12.34.56"), mit "#.####" Vierergruppen ("12.3456") und mit "#.#" Einergruppen ("1.2.3.4.5.6").

Format1100100010000001234,56
# #11 0 01 0 0 01 0 0 0 0 0 01 2 3 5
#.##11.0010.001.00.00.0012.35
#'####11001000100 00001235
#_#####1100100010_000001235
#.#:01:01.0.0:01.0.0.0:01.0.0.0.0.0.0:01.2.3.4:6
0 0 0.0 0 11 0 01 0 0 01 0 0 0 0 0 01 2 3 5
00 00.00 0101 0010 001 00 00 0012 35
00.00.00.00.00.0100.01.0000.10.001.00.00.0000.12.35
000-000.000-001000-100001-0001-000-000001-235
0•0•0•0’00•0•0•1’00•1•0•0’01•0•0•0’01•0•0•0•0•0•0’01•2•3•4’6

Natürlich können wir auch wieder wie gewohnt sowohl mit einem Dezimalpart (zum Beispiel "#.#,0") als auch mit führenden Nullen (zum Beispiel "00 00 00.") arbeiten. Wie wir bereits im letzten Abschnitt diskutiert haben darf dabei nicht das virtuelle Dezimaltrennzeichen am Ende des Format-Strings vergessen werden, da ansonsten nicht zwischen Dezimal- und Tausendertrennzeichen unterschieden werden könnte. Beispiele dafür finden Sie im unteren Teil der Tabelle.

Währungen, Gewichte, Längen, Prozentzeichen und andere Zusatztexte

Bisher haben wir uns nur reine Zahlen angesehen. Neben den Zeichen "0" bis "9" spielten in den letzten Abschnitten also maximal die üblichen Dezimal- und Tausendertrennzeichen im Ausgangstext oder im Format-String eine Rolle. Zahlen treten jedoch häufig auch mit anderen bedeutungstragenden Zeichen wie zum Beispiel Währungs-, Gewichts-, oder Längenangaben, Prozentzeichen oder anderen zusätzlichen Buchstaben, Worten oder Zeichen auf, deren Verarbeitungsweise wir uns im folgenden ansehen möchten. Derartige Zeichen können vom TextKonverter sowohl im Ausgangstext als auch im Format-String verarbeitet werden.

Bei der Interpretation der Zahlen im Ausgangstext wird zusätzlicher Text einfach ignoriert sofern die Zahl ununterbrochen in dem Text vorkommmt. Nutzen wir den Format-String "0" extrahiert der TextConverter aus den Ausgangstexten "1,10 Euro", "3 kg", "7%" und "$100.00" beispielsweise die Zahlen "1", "3", "7" und "100". Die restlichen Zeichen neben der reinen Zahl werden in den Beispielen also genauso wie die Nachkommastellen ignoriert (mehr zum Thema, falls der Text nicht ignoriert werden soll, weiter unten).

Andersherum formatiert der Format-String "0,00 €" die reinen Zahlen "10", "1.5" und "1,234" zu "10,00 €", "1,50 €" und "1,23 €". Die Zahlen werden also genau so wie in den letzten Abschnitten beschrieben formatiert und anschließend der vorangestellte und/oder angehängte Zusatztext aus dem Format-String ergänzt.

Format11010010001,23
0 kg1 kg10 kg100 kg1000 kg1 kg
0,00 EUR1,00 EUR10,00 EUR100,00 EUR1000,00 EUR1,23 EUR
$0.00$1.00$10.00$100.00$1000.00$1.23
000.00%001.00%010.00%100.00%1000.00%001.23%
# ### m1 m10 m100 m1 000 m1 m
x=.0x=1.0x=10.0x=100.0x=1000.0x=1.2

Dies funktioniert übrigens nicht nur dann, wenn nur auf einer der beiden Seiten Zusatzzeichen vorkommen, sondern auch für den Fall, wenn dies sowohl den Input-Text als auch den Format-String betrifft. Ein Beispiel ist der Format-String "USD 0.00" der sowohl die Ausgangstexte "10 $" als auch "10,00 USD", "ab 10 Dollar" und "$10" alle als "USD 10.00" ausgibt.

Falls aus dem Ausgangstext dagegen keine eindeutige Zahl extrahiert werden kann, bleibt der ursprüngliche Text einfach bestehen. Egal welchen Format-String Sie anwenden bleibt beispielsweise der String "A1B2C" als solcher stehen, da dieser Text die zwei konkurrierenden Zahlen "1" und "2" enthält und es unklar ist, welche dieser beiden Zahlen verarbeitet werden soll (es sei denn, Sie kombinieren diese beiden Zahlen indem Sie "B" als Dezimaltrenner definieren, was dann in der Zahl 1,2 resultieren würde).

Ebenso unverändert bleiben CSV-Zellen, XML-Attribute sowie der Text von inneren XML-Texten sofern der jeweilige Text gar keine Zahl enthält. Sowohl leere Zellen und Elemente als auch beliebiger reiner Text wie "abc" bleiben so einfach wie sie sind. So müssen Sie sich beispielsweise keine Sorgen um die aus Buchstaben bestehenden Überschriften Ihrer CSV-Spalten machen, wenn Sie eine gesamte Spalte auf ein bestimmtes Zahlenformat setzen möchten.

Dieses Verfahren bietet sich also insbesondere für zu bearbeitende Texte an, in denen die Ausgangszahlen möglichst isoliert stehen. Diese Vorraussetzung ist in den meisten CSV- und XML-Strukturen gegeben, da in der Regel pro CSV-Zelle oder XML-Attribut nur eine einzelne Zahl vorkommt. Anders verhält es sich natürlich, wenn zum Beispiel Fließtext bearbeitet werden soll, der einerseits mehrere verschiedene Zahlen enthalten kann und andererseits der sonstige Text neben den Zahlen erhalten bleiben soll. Auch im Falle von inneren Texten von XML-Daten kann dies eine Anforderung sein. Wenn Sie derartige Zahlen unter Beibehaltung sonstiger Zeichen oder zusätzlicher Textpassagen formatieren möchten, sollten Sie statt den Funktionen "CSV > Zahlenformat" und "XML > Zahlenformat" die Referenzfunktion nutzen, die in allen Textfeldern des TextKonverters verwendet werden kann. Eine Erklärung und Anwendungsbeispiele dieser Funktion finden Sie im letzten Abschnitt dieses Tutorials über die Anwendung des Zahlenformats in Referenzen.

Automatische Erkennung oder benutzerdefinierte Trennzeichen

Alle bisherigen Beispiele funktionieren ohne weitere Konfiguration allein mit der automatischen Erkennungsfunktion des TextKonverters. Zahlen wie "1", "1.5" oder "1.000.000" sind eindeutig zu interpretieren und bedürfen daher keiner weiteren Erklärungen.

Was aber geschieht, wenn Ihre Ausgangsdaten Zahlen wie beispielsweise "1.234" oder "1,234" enthalten? Diese Zahlen könnten beide entweder als Dezimalzahl oder auch als mit Tausendertrennzeichen geschriebene ganze Zahl "1234" interpretiert werden, je nachdem welcher Dezimaltrenner zu Grunde gelegt wird. Genauso wenig eindeutig ist die Lage, wenn ungewöhnliche Dezimal- oder Tausendertrenner verwendet werden, die zum Beispiel auch zu einem Fließtext gehören könnten, da der TextKonverter ohne Zusatzangaben automatisch lediglich die Zeichen Punkt und Komma als Dezimaltrenner interpretiert und nur das französische Leerzeichen, den schweizer Apostroph sowie ebenfalls das Komma und den in Deutschland üblichen Punkt als eines der möglichen Tausendertrennzeichen in Betracht zieht.

Wenn dagegen andere Zeichen in der Funktion einer der beiden Separatoren genutzt werden sollen, müssen diese explizit angegeben werden. Dafür stehen Ihnen in allen Zahlenformatsfunktionen des TextKonverters die Felder "Ursprüngliches Dezimaltrennzeichen" sowie "Ursprüngliches Tausendertrennzeichen" zur Verfügung. Per Default stehen beide dieser Felder auf "Automatische Erkennung" ("Auto"). Sie können hier beliebige Zeichen manuell eingeben oder aus der Schnellauswahl-Liste der üblichen Trennzeichen auswählen. Mit der Auswahl von "System" werden die vom Betriebssystem vorgesehenen oder im Betriebssystem manuell definierten Trennzeichen des Computers verwendet, auf dem der TextConverter gerade ausgeführt wird. Bei deutscher Lokalisierung sind das üblicherweise die Zeichen Komma als Dezimaltrenner sowie Punkt als Tausendertrenner während diese Zuordnung auf englischen Systemen üblicherweise genau andersherum vorkonfiguriert ist.

Auch wenn Ihre Zahlen wie im Eingangsbeispiel erst durch die Angabe der zu verwendenden Trennzeichen eindeutig interpretierbar werden oder Sie die Formatierung gewisser Zahlenformatstypen ausschließen möchten, sollten Sie die Möglichkeit dieser Trennzeichen-Definition nutzen. Geben Sie zum Beispiel explizit den Punkt als Tausendertrennzeichen an, werden Zahlenreihen wie "123 456 789" nicht als zusammenhängende Zahl mit französischem Leerzeichen-Tausender-Trenner verarbeitet und konvertiert sondern bleiben stattdessen als solche unverändert bestehen.

FormatDezimalTrennerTausenderTrenner1.2341,2341
0AutoAuto111
0.,112341
0,.123411
0.0AutoAuto1.21.21.0
0.0.,1.21234.01.0
0.0,.1234.01.21.0
0.0:1.2341,2341.0

Ohne die explizite Angabe der Trennzeichen werden sowohl die Zahl "1.234" als auch "1,234" als Dezimalzahlen interpretiert, da diese Interpretation wahrscheinlicher ist und häufiger in der Praxis vorkommt als Punkt und Komma hier als Tausendertrenner anzusehen. Treten in Zahlen dagegen zwei gleiche der genannten Trennzeichen auf, die Dreiergruppen von Zahlen voneinander separieren, ist die Ausgangslage eindeutig und die Trennzeichen werden bei der Auto-Erkennung immer als Tausendertrenner interpretiert, da der Dezimaltrenner maximal ein einziges Mal und im Gegensatz zum Tausendertrennzeichen nicht mehrfach innerhalb der gleichen Zahl auftreten darf. Treten mehrere Separationszeichen dagegen in für Tausendergruppen unüblichen Abständen auf wie zum Beispiel in IP-Adressen wie "192.168.0.1" bleibt der Ursprungstext unverändert.

Wenn Sie das gleiche Zeichen sowohl explizit als Dezimaltrenner definieren als auch als Tausendertrennzeichen, bleibt die ursprüngliche Zahl in jedem Fall ebenfalls als solche bestehen, da diese Angabe nicht eindeutig ist. "Auto" und "System" können dagegen ohne weiteres beide doppelt zusammen verwendet werden, da der TextConverter sich bei deren Verwendung automatisch um die richtige Zuordnung der letztendlich verwendeten Zeichens kümmert.

Übrigens brauchen Sie sich bei Ihren benutzerdefinierten Dezimal- und Tausendertrennern nicht nur auf einzelne Zeichen aus dem ASCII-Range beschränken sondern können auch beliebige Unicode-Zeichen nutzen oder sogar Trenner verwenden, die aus mehreren Zeichen bestehen. Dies kann zum Beispiel für Fälle nützlich sein, in denen Teile einer Zahl über mehrere Stellen hinweg in einem Text verteilt sind und über die Zahlenformat-Funktion zusammengeführt werden sollen.

Anwendung in Aktionslisten

Neben der Konfiguration der Zahlenformatseinstellungen über die entsprechenden erwähnten Eingabefelder der graphischen Benutzeroberfläche des TextConverters lässt sich die Zahlenformatierung auch über Aktionslisten durchführen. Dazu stehen Ihnen die Funktionen FORMAT_CELLS sowie FORMAT_INNERTEXTS und FORMAT_ATTRIBUTEVALUES zur Verfügung, die folgendermaßen angewendet werden können:

FORMAT_CELLS ALL 0
FORMAT_CELLS 1:ALL 0.00 ,

Mit der ersten Beispielzeile konvertieren wir alle Felder einer CSV-Tabelle zu Ganzzahlen ohne Nachkommastellen während die zweite Zeile die erste Spalte der Tabelle im Format 0.00 als Dezimalzahl mit zwei Nachkommastellen ausgibt und dabei das Komma als ursprünglichen Dezimaltrenner annimmt.

Hinter dem Funktionsnamen "FORMAT_CELLS" spezifizieren wir demnach zunächst die zu bearbeitenden Zellen, Spalten und Zeilen in genau der gleichen Weise wie auch bei allen anderen Aktionen von CSV-Aktionslisten (hier "ALL" für alle Felder beziehungsweise "1:ALL" [Spalten:Zeilen] für alle Zeilen der ersten Spalte; eine allgemeine Einführung finden Sie im verlinkten Dokument). Anschließend folgt der Format-String und abschließend optional der ursprüngliche Dezimaltrenner und gegebenenfalls optional das ursprüngliche Tausendertrennzeichen. Wenn wir diesen Part weglassen, wird implizit die automatische Erkennung beider Trennzeichen angenommen. Natürlich können Sie diese Eingabe auch geleitet über den Aktionslisteneditor vornehmen und müssen die Syntax daher nicht auswendig lernen.

Ähnlich funktionieren auch die beiden Funktion für die XML-Daten:

FORMAT_INNERTEXTS tagname "0,00 EUR"
FORMAT_ATTRIBUTEVALUES attributname:tagname 0,000 ,.

Hinter dem jeweiligen Keyword der Funktion "FORMAT_INNERTEXTS" (für die Formatierung innerer Texte von XML-Daten) beziehungsweise "FORMAT_ATTRIBUTEVALUES" (für die Formatierung von Attributwerten innerhalb der Tags von XML-Daten) geben Sie zunächst den Selektor in der gleichen Weise wie auch bei den anderen XML-Aktionen an (hier alle Elemente mit dem Tagnamen "tagname" im ersten beziehungsweise alle Attribute mit dem Namen "attributname" innerhalb von Tags mit dem Namen "tagname" im zweite Beispiel; eine allgemeine Einführung finden Sie im verlinkten Dokument). Danach folgen abermals der Format-String sowie die optionale Angabe der ursprünglichen Dezimal- und Tausendertrennzeichen.

Das Beispiel aus der ersten Zeile formatiert demnach alle inneren Texte innerhalb des Tagnamens "tagname" als "0,00 EUR" (wir setzen diesen Format-String in Anführungszeichen, da er ein Leerzeichen enthält, das ansonsten als Trenner zwischen den Parametern verwendet würde) während die zweite Zeile alle Attributwerte von Attributen mit dem Namen "attributname" innerhalb von Tags mit dem Namen "tagname" im Format "0,000" formatiert (mit "attributname:ALL" könnten wir alle Attribute mit dem Namen "attributname" innerhalb aller Tags unabhängig von deren Namen konvertieren, mit "ALL:ALL" alle Attribute unabhängig von Tag und Attributnamen und so weiter). Während wir in der ersten Zeile abermals die automatische Erkennung der Originalzahlen forcieren, indem wir keine Dezimal- oder Tausendertrennzeichen spezifizieren, geben wir im zweiten Beispiel mit ",." an, dass die Originalzahlen ein Komma als Dezimaltrenner sowie einen Punkt als Tausendertrenner verwenden.

Natürlich können Sie auch die XML-Aktionen bequem mit Hilfe des Aktionslisteneditors eingeben, der die syntaktisch korrekten Aktionslistenbefehle automatisch für Sie erstellt.

Mehrzeichige Dezimal- und Tausendertrennzeichen in Aktionslisten

In unseren bisherigen Beispielen bestehen unsere ursprünglichen Trennzeichen jeweils nur aus einem einzelnen Zeichen. Dadurch lassen sich diese Zeichen eindeutig definieren. Wenn nur ein Zeichen angegeben ist wie "," oder "." handelt es sich um das ursprüngliche Dezimaltrennzeichen und für das Tausendertrennzeichen wird eine automatische Erkennung verwendet:

<Dezimaltrennzeichen>

Und wenn zwei Zeichen angegeben sind wie zum Beispiel ",.", ".," oder ". " wird das erste der beiden Zeichen als ursprünglicher Dezimaltrenner und das zweite Zeichen als ursprünglicher Tausendertrenner angenommen:

<Dezimaltrennzeichen><Tausendertrennzeichen>

Wie aber können wir Trennzeichen definieren, die aus mehreren Zeichen bestehen? Bei einer Definition von "abcde" wäre ja schließlich nicht mehr klar erkennbar, wo der eine Separator endet und wo der andere beginnt.

Wir benötigen also ein Trennzeichen der Trennzeichen, welches Sie mit der folgenden Syntax für mehrzeichige ursprüngliche Dezimal- und/oder Tausenderseparatoren spezifizieren können:

<Trenner><Dezimaltrenner><Trenner><Tausendertrenner>

Wir definieren demnach zunächst ein Trennzeichen, das dann als Trennzeichen zwischen Dezimaltrenner und Tausendertrenner verwendet wird. Dieses Trennzeichen darf nur aus einem Zeichen bestehen und sollte natürlich weder im Dezimaltrenner noch im Tausendertrenner vorkommen.

Durch diese Möglichkeit können wir neben beliebigen "echten" Trennern aus mehreren Zeichen auch Funktionswörter wie "auto" oder "system" in unseren Aktionen verwenden:

FORMAT_CELLS 2:1-3 "$ 0.00" ;auto;'

Mit dieser Aktion formatieren wir die ersten drei Zeilen ("1-3") der zweiten Spalte (2:) unserer CSV-Daten im Format "$ 0.00". Als Tausendertrennzeichen möchten wir den Apostroph nutzen während wir das ursprüngliche Dezimaltrennzeichen automatisch erkennen lassen möchten. Um sowohl "auto" als auch "." hintereinander in einen Parameter schreiben zu können (Aktionen haben maximal zwei Parameter) definieren wir zunächst den Trenner ";" als beliebiges Zeichen, das in keinem der folgenden Trennzeichendefinitionen vorkommt und anschließend separieren wir mit diesem Zeichen "auto" von ' und erhalten ;auto;' als eindeutige Trennerdefinition.

Anwendung in Referenzen

Alle bisherigen Beispiele, die wir uns angesehen haben, bezogen sich auf die Anwendung der Zahlenformatsfunktionen auf Zahlen innerhalb von CSV- oder XML-Daten. Was können wir aber tun, wenn unsere zu formatierende Zahl außerhalb dieser Strukturen vorkommt, zum Beispiel im Fließtext einer Textdatei oder in einem anderen textbasierten Datenformat?

Auch in diesen Fällen können wir die Zahlenformatsfunktion verwenden. Wir nutzen diese dafür in Kombination mit der Referenz-Funktion des TextKonverters, die uns viele verschiedene Möglichkeiten gibt, zum Beispiel einzelne Zeichen, Wörter oder Zeilen innerhalb von beliebigen Texten und Textdateien anzusprechen, wiederzuverwenden und zu ändern. In dem verlinkten Dokument finden Sie eine Einführung in die Möglichkeiten und Grundlagen dieser Funktion, hier möchten wir uns im folgenden nur auf die Zahlenformatsfunktion beschränken.

Um Zahlenformate innerhalb von Referenzen anzuwenden, benötigen wir den Funktionsplatzhalter "format", der die folgenden Syntax hat:

format=<Zahlenformat>
format=<Zahlenformat>|sep=<Dezimaltrenner>
format=<Zahlenformat>|sep=<Dezimaltrenner><Tausendertrenner>

Wenn Sie die automatische Erkennung des TextKonverters nutzen möchten, können Sie die Syntax aus der ersten Zeile verwenden und zum Beispiel "format=0" oder "format=0,00" schreiben. Die Syntax der beiden weiteren Zeilen können Sie verwenden, wenn Sie einen ursprünglichen Dezimaltrenner beziehungsweise einen ursprünlichen Dezimaltrenner sowie einen ursprünglichen Tausendertrenner definieren möchten. Mit "format=0|sep=." erstellen Sie beispielsweise ganze Zahlen und definieren den Punkt als ursprünglichen Dezimaltrenner, während Sie mit "format=0.0|sep=,." Dezimalzahlen mit einer Nachkommastelle und dem Punkt als neuen Dezimaltrenner erstellen und dabei das Komma als ursprünglichen Dezimaltrenner sowie den Punkt als ursprünglichen Tausendertrenner voraussetzen. Falls Ihre Separatoren aus mehreren Zeichen bestehen, können Sie die gleiche Syntax wie in den Aktionslisten verwenden, die am Ende des letzten Abschnitts erläutert wurde. Also zum Beispiel "format=0|sep=;dsep;tsep" für "dsep" als Dezimaltrenner und "tsep" als Tausendertrenner.

Die Möglichkeiten der Referenzen sind sehr vielfältig, daher beschränken wir uns im folgenden nur auf einige wenige Beispielszenarien, die die Möglichkeiten der Anwendung des Funktionsplatzhalters "format" exemplarisch verdeutlichen sollen. Damit es funktioniert, müssen die Referenzen in jedem Fall über die Option "Aktionen > Optionen > Referenzen" aktiviert werden. Ansonsten werden die Referenzen als bloßer Text behandelt.

Einzelne Zeichen, Wörter oder Zeilen formatieren

Grundsätzlich arbeiten die Referenzen des TextKonverters in der gleichen Weise wie Platzhalter. Je nach verwendeter Referenz können wir uns beliebige Teile des vorhandenen Textes herausgreifen und diese dann im Original oder bearbeitet (in unserem Fall also bearbeitet über die Zahlenformatsfunktion) an einer anderen Stelle wieder verwenden, also zum Beispiel in allen Textfeldern der Aktionen des TextKonverters (wie zum Beispiel für das Ersetzen, Löschen, Einfügen oder Anhängen von Text). Voraussetzung dafür ist lediglich, dass die Ersetzung der Referenzen über die Option "Aktionen > Optionen > Referenzen" im TextKonverter aktiviert wurden.

Die folgenden drei Platzhalter beziehen sich beispielsweise auf bestimmte Zeichen, Wörter und Zeilen des Textes, die wir in verschiedener Weise formatieren:

%ref:chars=10,5>format=0%
%ref:word=17>format=0,0%
%ref:line=3>format=0.00%

Der erste Platzhalter %ref:chars=10,5>format=0% steht für die fünf Zeichen beginnend bei Zeichenposition 10 des Gesamttextes, formatiert als Ganzzahl. Der zweite Platzhalter steht für das siebzehnte Wort des Textes, formatiert als Dezimalzahl mit einer Nachkommastelle und einem Komma als Dezimaltrenner. Der dritte Platzhalter steht für den Inhalt der dritten Zeile, formatiert als Dezimalzahl mit Punkt als Dezimaltrenner und zwei Nachkommastellen. Die Zahlen und Formate dienen natürlich lediglich als Beispiel und können von Ihnen beliebig angepasst werden.

Referenzen können sich auch auf CSV-Daten oder XML-Strukturen beziehen, wie die folgenden drei Beispiele zeigen:

%ref:cell=2:3>format=0 EUR%
%ref:xml=x>format=USD 0.00%
%ref:xml=x>attribute=a>format=$0.00%

Der erste Platzhalter steht für den Inhalt der CSV-Zelle in der dritten Zeile der zweiten Spalte, formatiert mit Währungszeichen als "0 EUR". Der zweite Platzhalter steht für den inneren Text des Tags, auf den der Selektor x passt, formatiert als "USD 0.00" und der dritte Platzhalter steht für den Wert des Attributs "a" aus dem Tag, auf den der Selektor x passt, formatiert als "$0.00". Sollten mehrere Tags den gewählten Selektor matchen, kann ein einzelner davon mit >line=x herausgefiltert werden. Also steht %ref:xml=x>line=1>format=USD 0.00% entsprechend für den ersten Treffer des Selektors x.

Darüber hinaus können die einzelnen Referenzen beliebig miteinander verschachtelt werden. Zwei Beispiele dafür finden Sie in den nächsten beiden Zeilen.

%ref:line=7>chars=1-3>format=0000%
%ref:file=data.txt>line=3>word=2>format=0.000,%

Die erste Zeile steht für die Zeichen 1 bis 3 der Zeile 7 des Gesamttextes, formatiert als Ganzzahl mit vier führenden Nullen. Die zweite Zeile steht für das zweite Wort der dritten Zeile der Datei "data.txt", formatiert als Ganzzahl mit Tausendertrennzeichen.

Alle Zahlen eines Textes formatieren

Nachdem wir im letzten Abschnitt einige Möglichkeiten gesehen haben, wie wir verschiedene Platzhalter für verschiedene Textteile und verschiedene Formate bauen können, möchten wir uns nun einen konkreten Anwendungsfall ansehen. Wir möchten sämtliche Zahlen, die in einem Text vorkommen, in gleicher Weise formatieren.

Durch unsere Konvertierung möchten wir aus dem Text, den Sie in der Spalte "Original" der folgenden Tabelle finden, den Text rechts daneben in der Spalte "Ergebnis" machen.

OriginalErgebnis
Die Äpfel kosten 2 Euro, die Bananen Kosten 3 Euro und der Kürbis kostet 14 Euro.Die Äpfel kosten 2,00 Euro, die Bananen Kosten 3,00 Euro und der Kürbis kostet 14,00 Euro.

Wir nutzen dafür die Funktion "Text > Ersetzen" des TextKonverters mit den folgenden Einstellungen:

Suchen nach: ([0-9]+)
Ersetzen durch: %ref:regmatch=$1>format=0,00%
Optionen: Als regulären Ausdruck interpretieren

Da die Zahlen alle verschieden sind (und wir sie deswegen nicht einzeln als solche ansprechen können), arbeiten wir mit regulären Ausdrücken, die uns ermöglichen, beliebige Zeichenstrukturen auszuwählen. Der reguläre Ausdruck [0-9] steht für eine beliebige Ziffer von 0 bis 9, mit [0-9]+ suchen wir nach mindestens einer oder mehreren Ziffern dieser Art nacheinander (um auch Zahlen mit mehr als einer Stelle zu addressieren). Als Referenz nutzen wir "regmatch=$1". Diese Referenz steht für den Fund (Match) eines regulären Ausdrucks. Konkret in diesem Fall für den Fund $1, dem Inhalt der ersten Klammer des regulären Ausdrucks (daher haben wir [0-9]+ in Klammern gesetzt). Als Formatierung haben wir den Funktionsplatzhalter "format=0,00" angehängt, der für die individuelle Formatierung jedes einzelnen Treffers sorgt.

Mit diesem Befehl wird der TextKonverter nach beliebigen Zahlen innerhalb des Textes suchen. Jeder Fund wird dann anschließend durch den Platzhalter %ref:regmatch=$1>format=0,00% ersetzt, der jeden einzelnen Fund individuell für uns vor der Ersetzung entsprechend formatiert. Würden wir die Formatierung dagegen weglassen und nur durch %ref:regmatch=$1% ersetzen, würde sich der Originaltext nicht ändern, da dieser Platzhalter genau für den Fund steht (und genau das selbe wäre, als würden wir $1 schreiben).

Nur bestimmte Zahlen eines Textes formatieren

Natürlich ist es auch möglich, nicht alle Zahlen des Textes gleichermaßen zu ändern und sich bei der Formatierung auf einzelne Zahlen des Textes zu beschränken. Dies möchten wir uns im nächsten Beispiel ansehen, in dem wir nur die Geldbeträge innerhalb des Textes konvertieren möchten, während alle anderen Zahlen wie die Mengenangaben unverändert stehen bleiben sollen.

OriginalErgebnis
5 Äpfel kosten 3 €, 4 Bananen kosten 2 € und 1 Kürbis kostet 12 €.5 Äpfel kosten 3,00 Euro, 4 Bananen kosten 2,00 Euro und 1 Kürbis kostet 12,00 Euro.

Würden wir die Einstellungen aus dem letzten Beispiel verwenden, würde sich der Text "5,00 Äpfel kosten 3,00 €, 4,00 Bananen kosten 2,00 € und 1,00 Kürbis kostet 12,00 €." ergeben. Daher beziehen wir dieses Mal die Währungsangabe in unserer Suche mit ein:

Suchen nach: ([0-9]+) €
Ersetzen durch: %ref:regmatch=$1>format=0,00 Euro%
Optionen: Als regulären Ausdruck interpretieren

Hier suchen wir also nach einer beliebigen Zahl, die vor einem Leerzeichen und dem Zeichen "€" steht. Dadurch werden nur noch die Textpassagen "3 €", "2 €" und "12 €" mit dieser Suche gefunden. Um nur die Zahl und nicht das Euro-Zeichen aus den Treffern zu extrahieren, schreiben wir nur diese in die Klammern. Anschließend formatieren wir jede einzelne dieser gefundenen Zahlen mit dem Format-String "0,00 Euro" und erhalten unseren gewünschten Text, in dem wir nicht nur das Zahlenformat sondern auch das Währungszeichen geändert haben.

Übrigens macht es in diesem Beispiel keinen Unterschied ob wir mit der Klammer nur die Zahl oder unseren ganzen Suchbegriff umschließen, da auch die Formatfunktion dafür sorgen würde, dass das ursprüngliche €-Zeichen durch "Euro" ersetzt wird.

Weitere Erweiterungen

Falls wir auch Dezimalzahlen finden möchten (und nicht nur ganze Zahlen wie in den letzten beiden Beispielen), könnten wir den regulären Ausdruck um das Format der Dezimalzahlen erweitern und zum Beispiel neben den Ziffern 0 bis 9 auch das Komma in die Suche mit einschließen. Wenn wir unsere Suche nicht auf den ganzen Text anwenden möchten sondern zum Beispiel nur auf bestimmte Zeilen, könnten wir statt der Funktion "Text > Ersetzen" die Funktion "Zeilen > In Zeilen ersetzen" verwenden. So lassen sich die Beispiele beliebig variieren und auf Ihre eigenen Bedürfnisse anpassen.