Buchstaben nach bestimmten Kriterien ersetzen?

Hallo,

mein Problem ist folgendes:
In einer Textdatei finde ich verschiedene Buchstaben bzw. Zeichen, die mich stören. Diese möchte ich nun also ersetzen.
Konkret:
Das kleine „L“ wurde im ganzen Text durch ein großes „i“ ersetzt; das „k“ ist in vielen Fällen mitten im Wort großgeschrieben und statt „…“ ist immer „. . .“ oder „. . . .“ geschrieben.
Um genau zu sein handelt es sich hier um Untertitel, deshalb stört mich das ganze extrem.

Mit der „Finden und ersetzen“-Funktion von OpenOffice habe ich das zwar einigermaßen hinbekommen (die Punkte sind da ja kein Problem), aber eben nicht zur 100%igen Zufriedenheit, weil ich dazu noch weitere Funktionen brauche:

-Ersetze alle „i in groß“ durch „L in klein“ wenn nicht am Satzanfang und nicht alleinstehend [Da das ein englischer Text ist, gibt es nur äußerst selten ein großes L außerhalb des Satzanfangs, eigentlich nur bei Eigennamen und Abkürzungen. Am besten wäre in einem solchen Fall natürlich eine manuelle Abfrage…]

-Bei „K“ durch „k“ ersetzen ist es ja im Grunde das selbe in grün.

Weiß jemand, ob es ein kleines Programm, Online- oder Batchscript gibt, dass diese Funktionen beherrscht? Dürfte ja eigentlich nicht die höchste Programmierkunst erfordern…

Gruß, Clemens

Hallo Clemens,

Mit der „Finden und ersetzen“-Funktion von OpenOffice habe ich

bei meinem OO 3.0.1 heißt das Suchen Ersetzen, welche Version hast du denn?

Am besten wäre in einem solchen Fall natürlich
eine manuelle Abfrage…]

Die bietet doch Suchen & Ersetzen bei jedem Treffer.

Gruß
Reinhard

Mit der „Finden und ersetzen“-Funktion von OpenOffice habe ich

bei meinem OO 3.0.1 heißt das Suchen Ersetzen, welche Version
hast du denn?

Meine ich ja. Haarspalterei… :wink:

Am besten wäre in einem solchen Fall natürlich
eine manuelle Abfrage…]

Die bietet doch Suchen & Ersetzen bei jedem Treffer.

Suboptimal, bei fast 10000 Wörtern möchte ich nicht jedes einzelne Zeichen manuell betrachten müssen.

Hallo Clemens,

Mit der „Finden und ersetzen“-Funktion von OpenOffice habe ich

bei meinem OO 3.0.1 heißt das Suchen Ersetzen, welche Version
hast du denn?

Meine ich ja. Haarspalterei… :wink:

in dem Fall nicht. Könnte echt sein daß es jetzt OO 5.0 gibt und daß es jetzt dort so heißt, nur deshalb meine Nachfrage.

Am besten wäre in einem solchen Fall natürlich
eine manuelle Abfrage…]

Die bietet doch Suchen & Ersetzen bei jedem Treffer.

Suboptimal, bei fast 10000 Wörtern möchte ich nicht jedes
einzelne Zeichen manuell betrachten müssen.

Ich wußte nicht daß du so eine faule Socke bist, da brauchste doch nur k.A. 2-5 Tage für *sehr grins*

Okay, da bietet sich ein Makro an, was alle Umwandlungen in Fällen die eindeutig sind automatisch vornimmt.
Fälle die zweideutig sind mußte wohl oder übel manuell in einer Abfrage im Einzelfall entscheiden.

Letztlich kann ja ein Makro nicht denken sondern folgt stur festgelegten Regeln, dem Code.
Großes K am Satzanfang so lassen und großes K wenn links und rechts Buchstaben sind in kleines k wandeln sind klare Regeln, das klappt.

Um jetzt die Regeln für das Makro genau festzulegen mußt du dann doch den Text manuell anschauen und für JEDEN vorkommen könnenden Einzelfall die Regel festlegen.

Beispiel: (_ = Leerzeichen, x = beliebiger Buchstabe)

K_ am Satzanfang — so lassen
_K_ im Text — so lassen
xKx im Text — wandeln in xkx
_K. im Text — wandeln in _k.
-i- im Text — nachfragen

Erst dann kann man ein makro schreiben.
Jetzt kann ich schon maros schreiben, am liebsten in Excel. Bei Word tue ich mich schon schwer aber bei OO-Writer sehr schwer.

Word haste nicht?

Und wie kommt es eigentlich zu dieser seltsamen Textdatei? Welches Programm erstellt sowas?

Gruß
Reinhard

Okay, da bietet sich ein Makro an, was alle Umwandlungen in
Fällen die eindeutig sind automatisch vornimmt.
Fälle die zweideutig sind musste wohl oder übel manuell in
einer Abfrage im Einzelfall entscheiden.
[…]

Um jetzt die Regeln für das Makro genau festzulegen musst du
dann doch den Text manuell anschauen und für JEDEN vorkommen
könnenden Einzelfall die Regel festlegen.

Genau so meinte ich das. :smile:

Erst dann kann man ein makro schreiben.
Jetzt kann ich schon makros schreiben, am liebsten in Excel.
Bei Word tue ich mich schon schwer aber bei OO-Writer sehr
schwer.

Word haste nicht?

Naja, ich hab noch Word 2000 zur Auswahl. Wo kann man denn da „Makros“ machen?

Und wie kommt es eigentlich zu dieser seltsamen Textdatei?
Welches Programm erstellt sowas?

Naja, das sind inoffizielle, zusätzlich erstellte Untertitel. Vermutlich wollte dieser Verfasser den Untertiteln irgendwie seinen Individualitätsstempel aufdrücken - frag mich nicht warum.

Gruß, Clemens

Um genau zu sein brauche ich folgende Befehle:

  • = kleiner Buchstabe
    / = großer Buchstabe
    _ = Leerzeichen

großes i:
-I- → -l-
_I- → nachfragen
/I und I/ → nachfragen
[Satzende]_I → keine Aktion

großes K:
-K- → -k-
_K- → nachfragen
/K und K/ → nachfragen
[Satzende]_K → keine Aktion

. . . → …
. . . . → …

– → _- (Doppelminus zu Leerzeichen + Minus)

Hallo Clemens,

Um jetzt die Regeln für das Makro genau festzulegen musst du
dann doch den Text manuell anschauen und für JEDEN vorkommen
könnenden Einzelfall die Regel festlegen.

Genau so meinte ich das. :smile:

okay, dann leg mal los :smile:

Word haste nicht?

Naja, ich hab noch Word 2000 zur Auswahl.

Sehr gut.

Wo kann man denn da
„Makros“ machen?

Drücke Alt + F11, dann kannste dich da austoben mit deiner Programmiererei :smile:

Und wie kommt es eigentlich zu dieser seltsamen Textdatei?
Welches Programm erstellt sowas?

Naja, das sind inoffizielle, zusätzlich erstellte Untertitel.
Vermutlich wollte dieser Verfasser den Untertiteln irgendwie
seinen Individualitätsstempel aufdrücken - frag mich nicht
warum.

Kannst du mal die Datei hochladen mit rapidshare, siehe FAQ:2606 ,
Datenschutz ist gewährt, mein Englisch ist miserabel *lach*
Muß nicht die ganze Datei sein.
Kann auch nur ein Teil sein oder eine Beispieldatei.

Für mich ist einzig wichtig daß da alle Fälle von K, i, L, usw. vorkommen zum Testen.
Und auch da stehen wo sie im Original stehen, also als Untertitel.

Mangels Ahnung in Word, Untertitel sind Untertitel von Grafiken?
Soll das Makro nur dort prüfen oder auch im normalen Text?

Gruß
Reinhard

Das ist die Datei:
http://jump.fm/TWVUQ
Einfach mit dem Editor, WordPad, Word ect. öffnen, kannst .srt von mir aus auch umbenennen.
Untertiteldatei heißt Untertitel für ein Video…
Also einfach eine Volltextprüfung, nur die Zeilen mit den Start- und Endzeiten dürfen nicht verändert werden.

http://jump.fm/TWVUQ
Einfach mit dem Editor, WordPad, Word ect. öffnen, kannst .srt
von mir aus auch umbenennen.

Hallo Clemens,

wenn ich bei deinem Link auf Download klicke soll ich irgendwas runterladen, das mag ich nicht, hab eh zuviel Müll auf dem PC.

Lade es bitte woanders hoch wo ich es einfach so wie es ist runterladen kann ohne was zu installieren.

Gruß
Reinhard

Du musst nichts installieren - einfach auf „click here“ klicken. Das ist über dem dick gedruckten Link…

Du musst nichts installieren - einfach auf „click here“
klicken. Das ist über dem dick gedruckten Link…

Hallo Clemens,

okay, hab die Datei.

Soll das Ergebnis eine srt, txt, doc, eine OO-Writer-datei (weiß die Endung grad nicht) o.ä. sein?

Erste Lösungsansätze aber erst morgen, bin müd.

Du hast da wie gewünscht Regeln aufgestellt, überprüf die ob die komplett sind, dann darfste auch in die heia :smile:, oder mach das morgen.

Gruß
Reinhard

Nachtrag
Hallo Clemens,

bei den Regeln,

soll II automatisch in ll umgewndelt werden?

Gruß
Reinhard

Hallo Clemens,

manchmal hilft ein Trick, zum Bespiel so:

  • Ersetze alle L am Wortanfang (also Leerzeichen+L) durch „wurstbrot“
  • Ersetze alle L durch l
  • Ersetze alle „wurstbrot“ durch L

Cheers, Felix

okay, hab die Datei.

Soll das Ergebnis eine srt, txt, doc, eine OO-Writer-datei
(weiß die Endung grad nicht) o.ä. sein?

Ist mir Wurst, idealerweise .srt …
Ich bräuchte aber eher das Skript, weil ich das auf ca. 10 weitere Dateien anwenden muss.

II -> ll ist auch hilfreich, ja.

Gruß, Clemens

Hallo Clemens,

okay, fangen wir an.
Damit du zunächst mal am Code nix ändern brauchst und es im Gleichklang mit mir austesten kannst, lege bitte ein Verzeichnis C:\test an.
Dahinein kopiere die srt-Datei die du mir schicktest.

Dann starte Word mit einem leeren Dokument, speicher es mit irgendeinem Namen.
Dann Alt+F11. Links siehst du deine „Projekte“. Markiere durch Anklicken das Projekt deines Dokuments, erkennbar am Namen.
Dann Einfügen—Modul.

Rechts erscheint eine große weiße Fläche, dorthinein kopierst du meinen nachstehenden Code.

Ausführen kannst du den Code indem du dich mitten in den Code der Prozedur „Umwandeln“ stellst und F5 drückst oder in Word Alt+F8 drückst.

Wenn du später an den Code willst, Alt+F11, dann DOPPELklick auf „Modul1“. Wenn links „Modul1“ nicht sichtbar ist, dann klick auf die Pluszeichen wie im Explorer.

Üb das mal, ist einfach, muß aber später „sitzen“.

Derzeit wandelt der Code nur „. . .“ in „…“ um. Zur Kontrolle wird gleich danach Notepad gestertet und du kannst den geänderten Text kontrollieren.

Die Ursprungsdatei ist unverändert geblieben, in der Testphase besser, die umgwandelte Datei ist gespeichert und hat den Anhang „a“ am Dateinamen.

So, jetzt check mal in Notepad ob das Punkteproblem gelöst wurde, dann schauen wir weiter.

Gruß
Reinhard

Option Explicit
'
Sub Umwandeln()
Dim Inh As String, Datei(0) As String, D As Integer, appNB
Datei(0) = "c:\test\the sopranos s04e05.srt"
For D = LBound(Datei) To UBound(Datei)
 Inh = Einlesen(Datei(0))
 Inh = Punkte(Inh)
 Call Schreiben(Inh, Replace(Datei(0), ".srt", "a.srt"))
 appNB = Shell("notepad.exe " & Replace(Datei(0), ".srt", "a.srt"))
Next D
End Sub
'
Function Einlesen(Datei) As String
Dim FF As Long
FF = FreeFile
Einlesen = Space(FileLen(Datei))
Open Datei For Binary As #FF
 Get #FF, , Einlesen
Close #FF
End Function
'
Sub Schreiben(ByVal Inh As String, ByVal Datei As String)
Dim FF As Integer
FF = FreeFile
Open Datei For Binary As #FF
 Put #FF, , Inh
Close #FF
End Sub
'
Function Punkte(ByVal Inh As String) As String
While InStr(Inh, ". .") \> 0
 Inh = Replace(Inh, ". .", "..")
Wend
While InStr(Inh, "....") \> 0
 Inh = Replace(Inh, "....", "...")
Wend
Punkte = Inh
End Function

Okay, hat so geklappt.

Danke für deine ganze Mühe und geopferte Zeit!

Und wie geht das jetzt mit den anderen Buchstaben? Da wirds ein wenig komplizierter, nicht wahr?

Hallo Clemens,

Und wie geht das jetzt mit den anderen Buchstaben? Da wirds
ein wenig komplizierter, nicht wahr?

jain, je klarer die Regel desto einfacher.
Einfach bedeutet, ersetze alle LL durch ll.

Ich habe mit nur der Punkte-Korrektur begonnen, nicht wegen evtl. komplizierten anderen Umwandlungen sondern damit du den Umgang mit den Codes „drin“ hast.

Scheinbar klappt das mit dir sehr gut, hab da schon anderes erlebt.

In der für dich wichtigen Hauptprozedur „Umwandeln“ siehst du dieses:
>b> Dim Inh As String, Datei(0) As String, D As Integer, appNB
Datei(0) = „c:\test\the sopranos s04e05.srt“

Du sagtest was von 10 Dateien o.ä. Dafür ist der Code schon vorbereitet.
Du brauchst nur diese zwei Zeilen abzuändern wenn du mehr Dateien hast.
Was gar nicht schlecht ist wenn du alle mal durch den Code jagst und dann in Notebook anschaust ob es überall gut lief.

Dazu mußt du nur, da wo Datei(0) steht, dies ersetzen durch Datei(Anzahl-1)
D.h. bei 5 Dateien muß da stehen Datei(4), also eins weniger.

Anstatt der zweiten Zeile machst du soviele Zeilen wie dateien da sind und gibst jeder einen höheren Index, beginnend bei 0, also so:

Datei(0) = „c:\test\the sopranos s04e05.srt“
Datei(1) = „c:\test\bla bla.srt“
Datei(2) = „c:\Meine Musik\Tina Turner.srt“
Datei(3) = „f:\andrerOrdner\wichtig\Ina Deter.srt“

Von meinem Blickwinkel aus ist das leicht zu verstehen, frag nach wenn ich das falsch sehe.

Ich habe jetzt miteingebaut daß LL in ll gewandelt wird und „–“ in " -", teste es und kontrolliere es bitte.

Kontrollieren bedeutet, darauf achten ob vielleicht „LLL“ mal vorkommt oder „—“, wenn ja muß ich das mit berücksichtigen, wenn nein müßte es so okay sein.

Gruß
Reinhard

Option Explicit
'
Sub Umwandeln()
Dim Inh As String, Datei(0) As String, D As Integer, appNB
Datei(0) = "c:\test\the sopranos s04e05.srt"
For D = LBound(Datei) To UBound(Datei)
 Inh = Einlesen(Datei(0))
 Inh = Punkte(Inh)
 Inh = Ersetzen(Inh)
 Call Schreiben(Inh, Replace(Datei(0), ".srt", "a.srt"))
 appNB = Shell("notepad.exe " & Replace(Datei(0), ".srt", "a.srt"))
Next D
End Sub
'
Function Einlesen(Datei) As String
Dim FF As Long
FF = FreeFile
Einlesen = Space(FileLen(Datei))
Open Datei For Binary As #FF
 Get #FF, , Einlesen
Close #FF
End Function
'
Sub Schreiben(ByVal Inh As String, ByVal Datei As String)
Dim FF As Integer
FF = FreeFile
Open Datei For Binary As #FF
 Put #FF, , Inh
Close #FF
End Sub
'
Function Punkte(ByVal Inh As String) As String
While InStr(Inh, ". .") \> 0
 Inh = Replace(Inh, ". .", "..")
Wend
While InStr(Inh, "....") \> 0
 Inh = Replace(Inh, "....", "...")
Wend
Punkte = Inh
End Function
'
Function Ersetzen(ByVal Inh As String) As String
Ersetzen = Replace(Inh, "LL", "ll")
Ersetzen = Replace(Ersetzen, "--", " -")
End Function

Ich hab damit kein Problem, ich bin ein erfahrener PC-Nutzer, ich kann nur eben nicht Programmieren. :wink:

Von „LL“ war übrigens nie die Rede, vielmehr sollen ein großes i in ein kleines L und ein K in ein k umgewandelt werden, jedoch nur, wenn es mitten im Wort und kein Satzanfang ist, Wortanfänge und Abkürzungen sollen ja manuell abgefragt werden.

Bei „–“ zu " -" gibt es auch eine Einschränkung, nämlich dass „–“ nicht Bestandteil von „–>“ sein darf.

Hallo Clemens,

Ich hab damit kein Problem, ich bin ein erfahrener PC-Nutzer,
ich kann nur eben nicht Programmieren. :wink:

gut zu wissen. Ich weiß ja nie mit wem ich rede. Manche fallen schon in Ohnmacht wenn sie ein bißche Code sehen und raffen das nicht daß man im VB-Editor von einem Modul zum anderen wechseln will da mit Doppelklick draufklicken muß.

Und wenn ich sage wechsle ins Modul Modul1 und das ist links in der Liste nicht zu sehen, gehts shon wieder schief.
Dabei sind sie den Explorer gewöhnt und könnten wissen was das Pluszeichen bedeutet.

Das bedeutet keinesfalls daß „die“ bescheuert sind, nöö, die haben so einen Schlange starrt kaninchen-Effekt im Hirn wenn sie da Code sehen :smile:
Nix schlimmes, habe ich auch wenn ich neue Sachen kennenlerne.

Von „LL“ war übrigens nie die Rede,

okay, ich meinte II in ll

vielmehr sollen ein großes
i in ein kleines L und ein K in ein k umgewandelt werden,
jedoch nur, wenn es mitten im Wort und kein Satzanfang ist,
Wortanfänge und Abkürzungen sollen ja manuell abgefragt
werden.

Kommt später.

Bei „–“ zu " -" gibt es auch eine Einschränkung, nämlich dass
„–“ nicht Bestandteil von „–>“ sein darf.

Ersetze die Prozedur Ersetzen durch dieses:

Function Ersetzen(ByVal Inh As String) As String
Ersetzen = Replace(Inh, „II“, „ll“)
Ersetzen = Replace(Ersetzen, „–>“, „##>“)
Ersetzen = Replace(Ersetzen, „–“, " -")
Ersetzen = Replace(Ersetzen, „##>“, „–>“)
End Function

Gruß
Reinhard