Hallo Leute, wie kann ich in einem 2000 Seitigen Dokument alle Zahlen wo kein Punkt dahinter vorkommt in Text umwandeln? Also sprich 2100 in zweitausendeinhundert.
Schreib Dir Software, die das kann, Sprache egal. Oder verwende suchen/ersetzen.
suchen - ersetzen schrieb: > Schreib Dir Software, die das kann, Sprache egal. Oder verwende > suchen/ersetzen. Gibts da schon fertiges?
Sowas lässt sich super mit VBA (z.B. in Word) programmieren. -Entwicklertools einblenden -Makro aufnehmen und ansehen, wie es arbeitet -Strategie/Algorithmus ausdenken und Makro anpassen => Das entspricht dann dem händischen Vorgehen. Das ist etwas amateurhaft, genügt aber oft, um den Anfang zu bekommen. Da kommt dann sowas raus:
1 | Sub SuchenErsetzen() |
2 | ' |
3 | ' SuchenErsetzen Makro |
4 | ' |
5 | ' |
6 | Selection.Find.ClearFormatting |
7 | Selection.Find.Replacement.ClearFormatting |
8 | With Selection.Find |
9 | .Text = " 1 " |
10 | .Replacement.Text = "eins" |
11 | .Forward = True |
12 | .Wrap = wdFindContinue |
13 | .Format = False |
14 | .MatchCase = False |
15 | .MatchWholeWord = False |
16 | .MatchWildcards = False |
17 | .MatchSoundsLike = False |
18 | .MatchAllWordForms = False |
19 | End With |
20 | Selection.Find.Execute Replace:=wdReplaceAll |
21 | |
22 | End Sub |
Dann überlegt man sich, wie man alle Fälle abdeckt. Man könnte zum Beispiel für jede Zahl einen String generieren, beispielsweise mit der hier erzeugten Funktion, für das es von Microsoft ein Codebeispiel gibt. Die Funktion konvertiert Zahlen in Wörter: https://support.microsoft.com/de-de/office/konvertieren-von-zahlen-in-w%C3%B6rter-a0d166fb-e1ea-4090-95c8-69442cd55d98 Diese Funktion passt man dann an und implementiert man dann in eine For-Schleife:
1 | Dim i As Long |
2 | |
3 | For i = 1 To 1000000 |
4 | Selection.Find.ClearFormatting |
5 | Selection.Find.Replacement.ClearFormatting |
6 | With Selection.Find |
7 | .Text = " " & i & " " |
8 | .Replacement.Text = SpellNumber(i) |
9 | .Forward = True |
10 | .Wrap = wdFindContinue |
11 | .Format = False |
12 | .MatchCase = False |
13 | .MatchWholeWord = False |
14 | .MatchWildcards = False |
15 | .MatchSoundsLike = False |
16 | .MatchAllWordForms = False |
17 | End With |
18 | Selection.Find.Execute Replace:=wdReplaceAll |
19 | Next |
Das kann man sich dann nach belieben anpassen, um alle Fälle abzudecken. Beispielsweise könnte man "For i = 1000000 To 1 Step -1" wählen, wenn man unter ".Text" auch Zahlen ohne vorangestellte oder nachgestellte Leerzeilen detektieren möchte, jedoch aus 111 kein eins eins eins erzeugen möchte, sondern "einhundertelf" Was ich damit sagen möchte: Sei kreativ. Mit dem Programmieren bist du auf dem richtigen Weg. Gruß Simon
:
Bearbeitet durch User
Wie man sowas mit Word macht, weiss ich nicht. Mit sed und regex ist das aber kein Problem. Du müsstest dann den Text wieder in dein Word-Dokument kopieren und gegebenfalls neu formatieren.
>Wie man sowas mit Word macht, weiss ich nicht. Mit sed und regex ist das >aber kein Problem. Du müsstest dann den Text wieder in dein >Word-Dokument kopieren und gegebenfalls neu formatieren. Wie erzeugst du damit die ausgeschriebenen Zahlen?
Das Betriebssystem mit eingebautem Editor Emacs kann das natürlich :-) https://www.emacswiki.org/emacs/SpellNumber
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.