Buchstaben nach bestimmten Kriterien ersetzen?

Uppsala, ungeahnte Problematiken
Hallo Clemens,

ich habe das jetzt mit I und K eingebaut.

Irgendwas klappt da nicht. Weiß nicht obs an meinem Code
liegt, irgendwie spielt da völlig unerwartet der Zeichensatz
o.ä. eine Rolle.

Nachstehend der neue Code.

Das Riesenproblem ist, nehmen wir mal als Beispiel den 10ten
Textblock, da steht in Notepad nach dem Code dann

Just seItzer , dear.

Was ja so aussieht als ob mein Code da unkorrekt gearbeitet
hätte, denn normal müßte da stehen

Just seltzer , dear.

(Was heißt das eigentlich? Liebling ich trink grad
Selterswasser? *gg*)

Kopiere ich das aus Notepad raus nach Word so steht es auch
falsch da.

ABER, kopiere ich es nach Excel so steht da wie gewünscht
seltzer
Also hat mein Code doch funktioniert *rätsel*

Eben habe ich meine neuen Codeteile mal rausgenommen, also der
Code wandelt I nicht in l um.
Das Ergebnis ist gleich. In Notepad und Word wird es falsch
angezeigt, in Excel richtig.

Aaaaah, jetzt habe ich seItzer in Word eingefügt, wird
auch so angezeigt, dann habe ich es markiert und die
Schriftart von Times New Roman auf Arial geändert, schwupps
steht da auch in Word seltzer.

Das klappt auch in Notepad.

Also gib in Notepad Strg+a ein und wähle als
Format–Schriftart Arial.

Sind jetzt alle Probleme gelöst?

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
Dim N As Long
Const Gross As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ"
Const Klein As String = "abcdefghijklmnopqrstuvwxyzäöü"
Ersetzen = Replace(Inh, "II", "ll")
Ersetzen = Replace(Ersetzen, "--\>", "##\>")
Ersetzen = Replace(Ersetzen, "--", " -")
Ersetzen = Replace(Ersetzen, "##\>", "--\>")
For N = 2 To Len(Inh)
 Select Case Mid(Inh, N, 1)
 Case "I"
 If InStr(Klein, Mid(Inh, N - 1, 1)) \> 0 And
InStr(Klein, Mid(Inh, N + 1, 1)) \> 0 Then Mid(Inh, N, 1) = "l"
 If Mid(Inh, N - 1, 1) = "" And InStr(Klein, Mid(Inh,
N + 1, 1)) \> 0 Then Call Nachfrage
 Case "K"
 If InStr(Klein, Mid(Inh, N - 1, 1)) \> 0 And
InStr(Klein, Mid(Inh, N + 1, 1)) \> 0 Then Mid(Inh, N, 1) = "l"
 If Mid(Inh, N - 1, 1) = "" And InStr(Klein, Mid(Inh,
N + 1, 1)) \> 0 Then Call Nachfrage
 End Select
Next N
End Function
'
'- = 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
'
Sub Nachfrage()
MsgBox "ich frag mal nach \*gg\*"
End Sub

Moin, Reinhard,

Just seItzer , dear.

normal müßte da stehen

Just seltzer , dear.

ein Hoch auf die Arial - ich seh den Unterschied erst beim Antworten, wenn der Text in Courier gezeigt wird :smile:))

(Was heißt das eigentlich? Liebling ich trink grad
Selterswasser? *gg*)

Wahrscheinlich eher „Du bist heute ekelhaft - schmeiß mal’n Alka Seltzer ein“.

Gruß Ralf

Tut mir Leid, dass ich mich eine Weile nicht gemeldet hab, hab grad bisschen was um die Ohren, vielleicht finde ich ja heute Abend mal Zeit das ganze auszuprobieren.
Auf jeden Fall danke ich dir für deine Mühen, echt nett.

Gruß, Clemens

Hallo Reinhard,
habe gerade mal Zeit gefunden, um den Code anzupassen und auszuprobieren. Seltsamerweise spuckt er mir beim „Kompilieren“ nun immer irgendwelche Fehler aus:

Bei „Function Ersetzen(ByVal Inh As String) As String“ sagt er mir: „Fehler beim Kompilieren: Syntaxfehler“

Einen anderen hatte ich auch schon, der jetzt aber irgendwie nicht mehr kommt.
Woran liegts?

Gruß, Clemens

Mein Code geht jetzt so: [Meinen Pfad hab ich jetzt mal aus Datenschutzgründen zeniert… :wink:]

Option Explicit

Sub Umwandeln()
Dim Inh As String, Datei(12) As String, D As Integer, appNB
Datei(0) = „D:\X\The Sopranos S04E01.srt“
Datei(1) = „D:\X\The Sopranos S04E02.srt“
Datei(2) = „D:\X\The Sopranos S04E03.srt“
Datei(3) = „D:\X\The Sopranos S04E04.srt“
Datei(4) = „D:\X\The Sopranos S04E05.srt“
Datei(5) = „D:\X\The Sopranos S04E06.srt“
Datei(6) = „D:\X\The Sopranos S04E07.srt“
Datei(7) = „D:\X\The Sopranos S04E08.srt“
Datei(8) = „D:\X\The Sopranos S04E09.srt“
Datei(9) = „D:\X\The Sopranos S04E10.srt“
Datei(10) = „D:\X\The Sopranos S04E11.srt“
Datei(11) = „D:\X\The Sopranos S04E12.srt“
Datei(12) = „D:\X\The Sopranos S04E13.srt“
For D = LBound(Datei) To UBound(Datei)
Inh = Einlesen(Datei(12))
Inh = Punkte(Inh)
Inh = Ersetzen(Inh)
Call Schreiben(Inh, Replace(Datei(12), „.srt“, „a.srt“))
appNB = Shell(„notepad.exe " & Replace(Datei(12), „.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
Dim N As Long
Const Gross As String = „ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ“
Const Klein As String = „abcdefghijklmnopqrstuvwxyzäöü“
Ersetzen = Replace(Inh, „II“, „ll“)
Ersetzen = Replace(Ersetzen, „–>“, „##>“)
Ersetzen = Replace(Ersetzen, „–“, " -“)
Ersetzen = Replace(Ersetzen, „##>“, „–>“)
For N = 2 To Len(Inh)
Select Case Mid(Inh, N, 1)
Case „I“
If InStr(Klein, Mid(Inh, N - 1, 1)) > 0 And
InStr(Klein, Mid(Inh, N + 1, 1)) > 0 Then Mid(Inh, N, 1) = „l“
If Mid(Inh, N - 1, 1) = „“ And InStr(Klein, Mid(Inh,
N + 1, 1)) > 0 Then Call Nachfrage
Case „K“
If InStr(Klein, Mid(Inh, N - 1, 1)) > 0 And
InStr(Klein, Mid(Inh, N + 1, 1)) > 0 Then Mid(Inh, N, 1) = „l“
If Mid(Inh, N - 1, 1) = „“ And InStr(Klein, Mid(Inh,
N + 1, 1)) > 0 Then Call Nachfrage
End Select
Next N
End Function

'- = 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

Sub Nachfrage()
MsgBox „Nachfrage: Ersetzen?“
End Sub

Hallo Clemens,

Bei „Function Ersetzen(ByVal Inh As String) As
String“ sagt er mir: „Fehler beim Kompilieren:
Syntaxfehler“

am Zeilenumbruch. w-w-w bricht lange Zeilen um, die mußt du im Editor wieder zusammenbasteln.
Du erkennst sie weil sie hellgrün markiert sind wie Kommentare.
In den Case-Fällen in „Ersetzen“ gibt es nur zwei Codezeilen die beide mit If… beginnen.

Im Editor kannst du dann lange Zeilen aufteilen. An der Trennstelle schreibst du
Leerzeichen Unterstrich Leerzeichen
dann Enter.

Übrigens benutze nicht den code-Tag sondern den pre-Tag um Einrückungen im Code hier bei w-w-w zu erhalten.

In der Sub Umwandeln war noch ein Fehler drin, ich habe die 12 da wo es sein muß durch D ersetzt.

Mein Code geht jetzt so: [Meinen Pfad hab ich jetzt mal aus
Datenschutzgründen zeniert… :wink: ]

Das ist okay, wichtig ist nur daß es immer der gleiche Pfad für alle Dateien ist.
Und wenn sie immer schön brav hinten nur einen Index haben der lückenlos hochgezählt wird, kann man den Code noch verkürzen.

Nachfolgend der Code. Arial hast du ausprobiert?

Gruß
Reinhard

Option Explicit
'
Sub Umwandeln()
Dim Inh As String, Datei(12) As String, D As Integer, appNB
Datei(0) = "D:\X\The Sopranos S04E01.srt"
Datei(1) = "D:\X\The Sopranos S04E02.srt"
Datei(2) = "D:\X\The Sopranos S04E03.srt"
Datei(3) = "D:\X\The Sopranos S04E04.srt"
Datei(4) = "D:\X\The Sopranos S04E05.srt"
Datei(5) = "D:\X\The Sopranos S04E06.srt"
Datei(6) = "D:\X\The Sopranos S04E07.srt"
Datei(7) = "D:\X\The Sopranos S04E08.srt"
Datei(8) = "D:\X\The Sopranos S04E09.srt"
Datei(9) = "D:\X\The Sopranos S04E10.srt"
Datei(10) = "D:\X\The Sopranos S04E11.srt"
Datei(11) = "D:\X\The Sopranos S04E12.srt"
Datei(12) = "D:\X\The Sopranos S04E13.srt"
For D = LBound(Datei) To UBound(Datei)
 Inh = Einlesen(Datei(D))
 Inh = Punkte(Inh)
 Inh = Ersetzen(Inh)
 Call Schreiben(Inh, Replace(Datei(D), ".srt", "a.srt"))
 appNB = Shell("notepad.exe " & Replace(Datei(D), ".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
Dim N As Long
Const Gross As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ"
Const Klein As String = "abcdefghijklmnopqrstuvwxyzäöü"
Ersetzen = Replace(Inh, "II", "ll")
Ersetzen = Replace(Ersetzen, "--\>", "##\>")
Ersetzen = Replace(Ersetzen, "--", " -")
Ersetzen = Replace(Ersetzen, "##\>", "--\>")
For N = 2 To Len(Inh)
 Select Case Mid(Inh, N, 1)
 Case "I"
 If InStr(Klein, Mid(Inh, N - 1, 1)) \> 0 And InStr(Klein, Mid(Inh, N + 1, 1)) \> 0 Then Mid(Inh, N, 1) = "l"
 If Mid(Inh, N - 1, 1) = "" And InStr(Klein, Mid(Inh, N + 1, 1)) \> 0 Then Call Nachfrage
 Case "K"
 If InStr(Klein, Mid(Inh, N - 1, 1)) \> 0 And InStr(Klein, Mid(Inh, N + 1, 1)) \> 0 Then Mid(Inh, N, 1) = "l"
 If Mid(Inh, N - 1, 1) = "" And InStr(Klein, Mid(Inh, N + 1, 1)) \> 0 Then Call Nachfrage
 End Select
Next N
End Function
'
'- = 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
'
Sub Nachfrage()
MsgBox "Nachfrage: Ersetzen?"
End Sub

noch nicht ganz.
Okay, das hat jetzt erstmal halbwegs geklappt.
Die Punkte und die Doppel-„L“ hat das Skript erfolgreich bearbeitet, mit den großen "I"s im Satz hat es aber noch nicht hingehauen, genausowenig wie mit den "K"s.
Wie soll sich das ganze eigentlich mit der Nachfrage gestalten? Bisher kann ich nur „Nachfrage“ als einzelnes Makro ausführen, dann kommt ein kleines Fenster in dem der Nachfragetext steht mit einer OK-Schaltfläche, passiert aber nichts beim draufklicken.