• Offizieller Beitrag

    Hi,

    Es scheint tatsächlich Unis zu geben, die ihren perfekt getaggten Bibliotheksbestand nicht als BibTeX-Block exportieren lassen. Wäre zwar kein Aufwand, aber was solls.

    Hier ein kleines Tool, dass mit ein bisschen Regexp-Magie vorhandene Meta-Daten BibTeX-gerecht umformt (oder zumindest so nutzbar macht, dass Referencer sie klaglos importiert).
    Wie immer ist das Teil natürlich frei erweiterbar, um neue Felder, eigene Reguläre Ausdrücke und weitere Eintragstypen für BibTeX.

    Viel Spaß damit, falls es wirklich mal jemand brauchen sollte ;-).
    Johannes

    autoit.de/wcf/attachment/10020/ autoit.de/wcf/attachment/10021/

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: Johannes

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <GuiEdit.au3>
    #Include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Form1 = GUICreate("anything2bibtex", 594, 450, 192, 124)
    $Edit1 = GUICtrlCreateEdit("", 8, 8, 577, 225)
    $Combo1 = GUICtrlCreateCombo("book", 8, 248, 577, 25)
    GUICtrlSetData(-1, "book|article|inbook|misc")
    $Button1 = GUICtrlCreateButton("&Convert", 256, 280, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_convert")
    $Edit2 = GUICtrlCreateEdit("", 8, 312, 577, 129)
    GUISetState(@SW_SHOW)
    Opt("GUIONEventMode", 1)
    GUISetOnEvent(-3, "_exit")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _convert()
    ; read template
    $type = GUICtrlRead($Combo1)
    Local $template

    [/autoit] [autoit][/autoit] [autoit]

    If Not _FileReadToArray(@ScriptDir & "\template-" & $type & ".txt", $template) Then
    MsgBox(4096, "Error", "Error " & @error)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $source = GUICtrlRead($Edit1)
    $regexFile = @ScriptDir & "\regex-" & $type & ".ini"

    [/autoit] [autoit][/autoit] [autoit]

    ; read values
    For $i = UBound($template) - 2 To 2 Step -1
    $parts = StringSplit($template[$i], "=")
    $id = StringStripWS($parts[1], 8)
    ; regex
    $regex = IniRead($regexFile, "regex", $id, "")
    If $regex <> "" Then
    $hits = StringRegExp($source, $regex, 4)
    $sum = ""
    For $j = 0 To UBound($hits) - 1
    $subArray = $hits[$j]
    $replace = IniRead($regexFile, "replace", $id, "{$1}")
    For $k = 0 To UBound($hits[$j]) - 1
    $replace = StringReplace($replace, "$" & $k, StringStripWS($subArray[$k], 7))
    Next
    If $j <> 0 Then $sum &= IniRead($regexFile, "repeat", $id, ", ")
    $sum &= StringStripWS($replace, 7)
    Next
    ; title fix
    if $id="TITLE" Then
    $sum = StringRegExpReplace($sum, "[A-ZÖÜÄ]", "{$0}")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $template[$i] = $id & "=" & $sum & ","
    Else
    _ArrayDelete($template, $i)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; build result
    ; (generate id)
    $template[1] = StringReplace($template[1], "$id$", _TimeToTicks(@HOUR,@MIN,@SEC))

    [/autoit] [autoit][/autoit] [autoit]

    ; show result
    $entry = ""
    For $i = 1 To UBound($template) - 1
    $entry &= StringStripWS($template[$i], 7) & @CRLF
    Next
    _GUICtrlEdit_SetText($Edit2, $entry)

    [/autoit] [autoit][/autoit] [autoit]

    ; save result
    $file = FileOpen("literatur.bib", 1)
    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf
    FileWrite($file, $entry)
    FileClose($file)
    EndFunc ;==>_convert

    [/autoit]