Römische Zahlen umwandeln

German support forum

Moderators: Hacker, Stefan2, white, sheep

Post Reply
Xantelupe
New Member
New Member
Posts: 1
Joined: 2018-06-07, 08:23 UTC

Römische Zahlen umwandeln

Post by *Xantelupe » 2018-06-07, 08:27 UTC

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?

User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 36354
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) » 2018-06-07, 09:00 UTC

Nein, derzeit leider nicht. Das wäre ein guter Anwendungsfall für ein Inhaltsplugin.
Author of Total Commander
http://www.ghisler.com

User avatar
Stefan2
Power Member
Power Member
Posts: 2083
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 » 2018-06-07, 10:12 UTC

>> 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?




 

vdijken
Junior Member
Junior Member
Posts: 50
Joined: 2016-07-30, 14:07 UTC
Location: The Netherlands

Post by *vdijken » 2018-06-08, 20:56 UTC

Ist es nicht viel einfacher die Software an zu passen das es arabische Zahlen produziert?

User avatar
Stefan2
Power Member
Power Member
Posts: 2083
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 » 2018-06-09, 07:03 UTC

vdijken wrote:Ist es nicht viel einfacher die Software an zu passen das es arabische Zahlen produziert?
Wenn man selbst die Möglichkeit dazu hat.
Aber eventuell kann/darf man an der Software nichts ändern, oder bekommt nur die Ergebnisdateien zugesendet.




 

regex
Junior Member
Junior Member
Posts: 31
Joined: 2007-07-19, 07:30 UTC

Post by *regex » 2018-06-09, 08:14 UTC

Lt. Internetsuche gibt es seit Excel 2013 dort eine Funktion namens arabisch, die diese Umwandlung macht. Da ich noch mit älteren Versionen von Excel unterwegs bin, kann ich aber dazu nichts Konkretes sagen. Aber vielleicht hast du ja Zugriff darauf.

vG

User avatar
Wilhelm M.
Power Member
Power Member
Posts: 741
Joined: 2003-06-05, 10:45 UTC

Post by *Wilhelm M. » 2018-06-09, 10:12 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:
Grüße/Regards,
Wilhelm

User avatar
Cargo
Junior Member
Junior Member
Posts: 8
Joined: 2005-04-14, 12:26 UTC
Location: Germany

Post by *Cargo » 2018-06-10, 18:51 UTC

In Excel 2013 gibt es die Funktion RÖMISCH().

Eventuell auch schon in Versionen vorher.

Nach kurzem Test -> funktioniert.

hth

User avatar
Wilhelm M.
Power Member
Power Member
Posts: 741
Joined: 2003-06-05, 10:45 UTC

Post by *Wilhelm M. » 2018-06-11, 11:29 UTC

Römisch() ist aber genau der umgekehrte Prozess. Den gibt es schon seit längerem. Angeblich gibt es in neueren Excel-Versionen auch ein Arabisch(), aber das habe ich nur gelesen.
Grüße/Regards,
Wilhelm

User avatar
Stefan2
Power Member
Power Member
Posts: 2083
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 » 2018-06-11, 12:31 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.



 

User avatar
Stefan2
Power Member
Power Member
Posts: 2083
Joined: 2007-09-13, 22:20 UTC
Location: Europa

VBScript: ForEachSelFileDo - Roman To Arabic.vbs Convert num

Post by *Stefan2 » 2018-06-12, 07:38 UTC

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!

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.
'////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////




 

User avatar
Hacker
Moderator
Moderator
Posts: 10999
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker » 2018-06-12, 18:02 UTC

Sollten da die längeren Strings nicht als erstes ersetzt werden?

Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.

User avatar
Stefan2
Power Member
Power Member
Posts: 2083
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 » 2018-06-12, 18:21 UTC

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




 

User avatar
Hacker
Moderator
Moderator
Posts: 10999
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker » 2018-06-12, 19:05 UTC

Stefan2,
Ach, stimmt. Mein Fehler.

Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.

Post Reply