Römische Zahlen umwandeln
Moderators: white, Hacker, Stefan2
Römische Zahlen umwandeln
Im Computer-Zeitalter Listen mit römischen Zahlen zu ordnen finde ich sehr unpraktisch. Trotzdem kommt es immer wieder vor.
Gibt es eine Lösung, mithilfe von Total-Commander, eine Liste auf einen Rusch von römischen in arabische Zahlen umzuwandeln?
Gibt es eine Lösung, mithilfe von Total-Commander, eine Liste auf einen Rusch von römischen in arabische Zahlen umzuwandeln?
- ghisler(Author)
- Site Admin
- Posts: 48107
- Joined: 2003-02-04, 09:46 UTC
- Location: Switzerland
- Contact:
Nein, derzeit leider nicht. Das wäre ein guter Anwendungsfall für ein Inhaltsplugin.
Author of Total Commander
https://www.ghisler.com
https://www.ghisler.com
>> römischen in arabische Zahlen
Das ist nicht so ganz einfach.
zB wird >i< in >1< umgewandelt, und iii in 111 statt 3.
Aber um wie viele verschiedene "römischen Zahlen" reden wir denn hier bei dir?
Und wo stehen die im Dateinamen, immer am Anfang, oder auch mal mittendrin?
D.h.: sind die römischen Zahlen immer von Leerzeichen oder speziellen Zeichen wie zB Klammern umgeben bzw. stehen immer am Anfang oder Ende des Namens?
Je nachdem was du vor hast, kann dir hier vielleicht doch geholfen werden. Zur Not mittels eines Skripts?
Das ist nicht so ganz einfach.
zB wird >i< in >1< umgewandelt, und iii in 111 statt 3.
Aber um wie viele verschiedene "römischen Zahlen" reden wir denn hier bei dir?
Und wo stehen die im Dateinamen, immer am Anfang, oder auch mal mittendrin?
D.h.: sind die römischen Zahlen immer von Leerzeichen oder speziellen Zeichen wie zB Klammern umgeben bzw. stehen immer am Anfang oder Ende des Namens?
Je nachdem was du vor hast, kann dir hier vielleicht doch geholfen werden. Zur Not mittels eines Skripts?
- Wilhelm M.
- Power Member
- Posts: 999
- Joined: 2003-06-05, 10:45 UTC
Im folgenden Link wird erklärt, wie man in Excel >= 2010 römische in arabische Zahlen umwandelt:
http://www.excelformeln.de/formeln.html?welcher=228
Vielleicht kannst Du damit etwas anfangen. Ich war zu faul, es genauer zu studieren...![Wink :wink:](./images/smilies/icon_wink.gif)
http://www.excelformeln.de/formeln.html?welcher=228
Vielleicht kannst Du damit etwas anfangen. Ich war zu faul, es genauer zu studieren...
![Wink :wink:](./images/smilies/icon_wink.gif)
Grüße/Regards,
Wilhelm
Wilhelm
- Wilhelm M.
- Power Member
- Posts: 999
- Joined: 2003-06-05, 10:45 UTC
Ja, Excel 365 v16 kann das, aber anscheinend nur direkt erkennbare römische Zahlen,
nicht solche, die irgendwo im Namen stehen.
A1
Test iii Dateiname.ext
C1
=ARABISCH((A1)
>#WERT!<
- - -
Man müsste also diese römische Zahlen erst mal genau lokalisieren und extrahieren.
Aber dazu kam vom OP noch keine Infos.
Beispiel:
A1
Test iii Dateiname.ext
C1
=TEIL(A1;FINDEN(" ";A1);4)
>iii<
[die feste '4' kann man eventuell durch ein zweites FINDEN() ersetzen]
E1
=ARABISCH(C1)
>3<
F1
<hier fehlt noch das zusammensetzen des neuen namens>
- - -
Aber viel einfacher als mit Excel könnte man das mit einem Skript erledigen.
nicht solche, die irgendwo im Namen stehen.
A1
Test iii Dateiname.ext
C1
=ARABISCH((A1)
>#WERT!<
- - -
Man müsste also diese römische Zahlen erst mal genau lokalisieren und extrahieren.
Aber dazu kam vom OP noch keine Infos.
Beispiel:
A1
Test iii Dateiname.ext
C1
=TEIL(A1;FINDEN(" ";A1);4)
>iii<
[die feste '4' kann man eventuell durch ein zweites FINDEN() ersetzen]
E1
=ARABISCH(C1)
>3<
F1
<hier fehlt noch das zusammensetzen des neuen namens>
- - -
Aber viel einfacher als mit Excel könnte man das mit einem Skript erledigen.
VBScript: ForEachSelFileDo - Roman To Arabic.vbs Convert num
Hier mal ein VBScript mit ganz einfacher 1:1 Zeichenumwandlung für Zahlen I-X (1 bis 10) , nur mal so, als POC.
Nur für Testdateien, oder habe ein Backup!
Nur für Testdateien, oder habe ein Backup!
Code: Select all
'// Here's a very simple VBS script, stupid one-to-one string replacement.
'// Would need to use a better algorithm, but for just some files this may work (HAVE A BACKUP!!!)
'
'////////////////////////////////////////////////////////////////
'FROM:
'Test 1 Dateiname i.ext
'Test 2 Dateiname ii.ext
'Test iii Dateiname 3.ext
'IV Test 4 Dateiname.ext
'V Test 5 Dateiname.ext
'VI Test 6 Dateiname VI.ext
'VII Test 7 Dateiname (VII).ext
'VIII Test 8 Dateiname [VIII].ext
'IX Test 9 Dateiname IX Test.ext
'X Test 10 Dateiname X Test.ext
'TO:
'4 Test 4 Dateiname.ext
'5 Test 5 Dateiname.ext
'6 Test 6 Dateiname 6.ext
'7 Test 7 Dateiname (7).ext
'8 Test 8 Dateiname [8].ext
'9 Test 9 Dateiname 9 Test.ext
'10 Test 10 Dateiname 10 Test.ext
'Test 1 Dateiname 1.ext
'Test 2 Dateiname 2.ext
'Test 3 Dateiname 3.ext
'////////////////////////////////////////////////////////////////
'// TC-Button:
'// Command = "%COMMANDER_PATH%\TOOLs\CMDs\_ForEachSelFileDo - RomanToArabic.vbs"
'// Parameter = "%L"
'// Startpath =
'// Icon = WScript.exe
'// Tooltip = Convert Romanic digit to Arabic
'//
'// Script found at: https://ghisler.ch/board/viewtopic.php?p=342688#342688
'// Date: 2018-06-12 Tue
'// Version: 1.0
'////////////////////////////////////////////////////////////////
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSO = Wscript.CreateObject("WScript.Shell")
LeftDelim = "\b"
RightDelim = "\b"
'////////////////////////////////////////////////////////////////
sTCtempList = Wscript.arguments.Item(0) ' The TC temp file due the "%L"
If FSO.FileExists(sTCtempList) Then
Const FORREADING = 1
Set oTextStream = FSO.OpenTextFile(sTCtempList,FORREADING)
Do Until oTextStream.AtEndOfStream
vCurrLine = oTextStream.ReadLine
Set oFile = FSO.GetFile(vCurrLine)
vFile = FSO.GetFileName(oFile)
vBase = FSO.GetBaseName(oFile)
vExte = FSO.GetExtensionName(oFile)
vAlt = vBase
'Function ReplaceRegEx(strOrg, strSearch, strReplace, bIgnoreCase, bGlobal)
'ACHTUNG : Groß- / Kleinschreibung wird berücksichtigt !!! (bIgnoreCase=False ; iii != Iii != III)
'ATTENTION: Upper- Lower-Case writing is respected !!! (bIgnoreCase=False ; iii != Iii != III)
strPattern = "X"
strReplace = "10"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "IX"
strReplace = "9"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "VIII"
strReplace = "8"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "VII"
strReplace = "7"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "VI"
strReplace = "6"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "V"
strReplace = "5"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "IV"
strReplace = "4"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "iii"
strReplace = "3"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "ii"
strReplace = "2"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
strPattern = "i"
strReplace = "1"
vBase = ReplaceRegEx(vBase, LeftDelim & strPattern & RightDelim, strReplace, False, True)
'MsgBox vAlt & vbLF & vBase
FSO.MoveFile vFile, vBase & "." & vExte ' use for .RenameFile too
Loop
oTextStream.Close
Else
WScript.Echo "Input file sTCtempList not found."
End If
'////////////////////////////////////////////////////////////////
Function ReplaceRegEx(strOrg, strSearch, strReplace, bIgnoreCase, bGlobal)
Dim regEx
Set regEx = New RegExp
regEx.Pattern = strSearch
regEx.IgnoreCase = bIgnoreCase
regEx.Global = bGlobal
ReplaceRegEx = regEx.Replace(strOrg, strReplace)
End Function 'ReplaceRegEx
'////////////////////////////////////////////////////////////////
'This is the end, my only friend, the end.
'////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////
Hacker wrote:Soltten da die längeren Strings nicht als erstes ersetzt werden?
Roman
Die Problematik hatte ich ansatzweise beim normalen Replace(),
aber beim RegExReplace matche ich ja auf \bPattern\b,
das funktionierte bei meinen simplen Tests sehr gut
und matcht nicht auf ein einzelnes <i> innerhalb von zB <iii>
sondern nur auf irgendwie "nicht-Zeichen" begrenzte Zeichengruppen.
(also Wortgrenzen ==> Leerzeichen, Zeichenketten-anfang bzw. -ende usw., quasi eine "[X] Nur ganzes Wort" Option)
Für andere Leser:
\b == Steht für eine Wortgrenze. Wortgrenzen sind an den Stellen, wo kein anderes Wortzeichen vor oder hinter einem Wortzeichen steht.
https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Regular_Expressions
The metacharacter \b is an anchor like the caret and the dollar sign.
https://www.regular-expressions.info/wordboundaries.html