blackhawk386
Goto Top

Tilde Zeichen per Batch ersetzen

Hi!

Ich habe eine Datei in Textform, in der Umlaute per Batch umgewandelt werden müssen. Dazu habe ich hier auch schon die prinzipielle Lösung gefunden welche auch super Funktioniert. Dummerweise bestehen die Umlaute in der original Datei aus Sonderzeichen. Nun stehe ich vor dem Problem, dass das "ß" als Tilde "~" vorliegt.

Lässt sich das ~ Zeichen per Batch in ein ß umwandeln?
Weder ^~ noch '~' oder "~" funktionieren...

Vielen Dank!

Grüße,
Blackhawk

Content-Key: 273602

Url: https://administrator.de/contentid/273602

Printed on: April 20, 2024 at 02:04 o'clock

Member: Clijsters
Solution Clijsters Jun 02, 2015, updated at Jun 03, 2015 at 06:19:58 (UTC)
Goto Top
Hallo Blackhawk,

ich kann deine Frage leider auch nicht ganz beantworten, aber ich habe deswegen mal etwas herumgespielt.

Was ich auch tuhe, das ~ muss ich eigentlich nicht escapen. Ich muss nur witzigerweise dafür sorgen, dass es nicht alleine auftritt.
Dann ging es.
Mit dem ß war es auch nicht sehr simpel.

Folgendes hat bei mir geklappt:
::@echo off
setlocal enableDelayedExpansion

set "toreplace=a~"  
set "tocheck=das macht Spa~, oder nicht?"  

set "result=!tocheck:%toreplace%=ass!"  
echo !result!

::--------------------------
">>>tildeTest.bat  
">>>setlocal enableDelayedExpansion  
">>>set "toreplace=a~"  
">>>set "tocheck=das macht Spa~, oder nicht?"  
">>>set "result=!tocheck:a~=ass!"  
">>>echo !result!  
das macht Spass, oder nicht?
">>>  
Das Problem ist, dass ich hier einen Buchstaben angegeben habe, welcher dem ~ vorsteht. Alleinstehend hat es nicht funktioniert...

Vielleicht ein Workaround?
Einem ß sollte ja immer (wenn es deutscher Text ist) ein Umlaut bevorstehen. so viele sind das nicht face-wink


Beste Grüße
Dominique
Member: rubberman
Solution rubberman Jun 02, 2015, updated at Jun 03, 2015 at 06:20:33 (UTC)
Goto Top
Hallo Blackhawk.

Die Tilde gehört zu den Zeichen (neben * und =) die sich nicht mit der "normalen" Textersetzung innerhalb einer Variable behandeln lassen. Hier gibt es nur unschöne und mehr oder weniger unsichere Workarounds. Bsp.:
@echo off &setlocal
set "var1=Schweinefra~ mit So~e!"  
set "var2="  

>nul chcp 1252
set "sz=ß"  
>nul chcp 850
:loop
for /f "tokens=1* delims=~" %%i in ("%var1%") do (  
  set "var1=%%j"  
  if defined var1 (
    set "var2=%var2%%%i%sz%"  
    goto loop
  ) else (
    set "var2=%var2%%%i"  
  )
)
echo %var2%
pause
Grüße
rubberman
Member: Blackhawk386
Blackhawk386 Jun 03, 2015 updated at 06:38:18 (UTC)
Goto Top
Danke, habe es mit vorangestellten Buchstaben hin bekommen. Nicht schön, aber es funktioniert! face-smile
Und danke für den Hinweis, dass ß nur nach Umlauten kommt. Ich hätte das vermutlich erst gemerkt, nachdem ich das komplette Alphabet eingegeben habe. face-big-smile

Grüße
Member: rubberman
rubberman Jun 03, 2015 at 16:07:51 (UTC)
Goto Top
Und danke für den Hinweis, dass ß nur nach Umlauten kommt.
Das ist falsch!
Daumenregel: ß folgt auf lang gesprochene Vokale und Umlaute, sowie Doppelvokale (Ruß, groß, müßig, reißen, schließen, draußen). Bei kurzen Vokalen ist es den neuen Rechtschreibgeboten zufolge zum ss geworden (Fass, Fluss, muss, dass, Missverständnis).

Die tatsächlichen Regeln findest du natürlich im Duden ...

Grüße
rubberman
Member: Biber
Biber Jun 03, 2015 updated at 16:54:55 (UTC)
Goto Top
[OT]
... mal ganz abgesehen von Ostseehalbinseln wie zum Beispiel Darß, siehe de.wikipedia.org/wiki/Darß

[/OT]
Member: Clijsters
Clijsters Jun 03, 2015 updated at 18:03:10 (UTC)
Goto Top
[OT]
Ich nehme mal an (und halte es für selbstverständlich), dass mit umlauten Vokale gemeint sind... face-wink


Lg

Edit: Ich hab's auch verbockt...

@Biber: das hätte ich nicht gewusst.
Nun denn, workaround bleibt workaround.
[/OT]