Freitext 1 (Bandnummer) in römische Ziffern umwandeln

Simon E. hinzugefügt 1 Monat her
unbeantwortet

Hallo Liebe Community,

Ich muss für einen Zitationsstil die Bandnummer von Beiträgen in Gesetzeskommentaren als römische Ziffer ausgeben. Mangels eines dedizierten Bd-nr. Feldes habe ich hierzu das Freitext 1 Feld benutzt. Gleichzeitig soll aber dieselbe Datenbank mit einem anderen Stil verwendet werden, der die Bandnummer als arabische Zahl ausgibt (Verschiedene Verlage/Geschmäcker mit verschiedenen Vorgaben). Die momentan in der Datenbank als arabische Zahlen gespeicherten Bandnummern müssen also irgendwie römische Ziffern umgewandelt werden.

Eine besondere Schwierigkeit ergibt sich daraus, dass es Loseblattkommentare gibt, die auch schon mal einen Band "zwischenschieben" z.B.: BK Ordner 1a. Soweit ich das sehe wird dann aber früher oder später die Nummerierung der Bände geändert und der Odrner 1a somit zum Ordner 2. Das Problem tritt also sehr selten auf.


Basierend auf diesem Code habe ich mich bemüht etwas zu basteln, jedoch ohne Erfolg.


Ich wäre für jeden Hinweis dankbar.


Viele Grüße,

Simon


// #C5_43142
//Version 1.0

using System;
using System.Linq;
using System.Collections.Generic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Collections;
using SwissAcademic.Drawing;

namespace SwissAcademic.Citavi.Citations
{
	public class ComponentPartFilter
		:
		IComponentPartFilter
	{
		public IEnumerable<ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
		{
			handled = false;

			if (componentPart == null) return null;
			if (citation == null || citation.Reference == null) return null;
			var volumestring = citation.Reference.CustomField1;
			if (string.IsNullOrWhiteSpace(volumestring)) return null;
			var VolumeFieldElement = componentPart.GetFieldElements().FirstOrDefault<FieldElement>(item => item.PropertyId == ReferencePropertyId.Volume);
			if (VolumeFieldElement == null) return null;
		
			var output = new TextUnitCollection();
			
			var VolumeStringRoman = NumeralSystemConverter.ToRomanNumber(arabicNumber: volumestring.ToString(), lowerCase: false);
			
			var VolumeStringTextUnit = new LiteralTextUnit(VolumeStringRoman);
			output.Add(VolumeStringTextUnit);
			
			handled = true;
			return output;
		}}}