- 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
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.1
Author: Johannes
#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>
$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")
While 1
Sleep(100000)
WEnd
Func _exit()
Exit
EndFunc ;==>_exit
Func _convert()
; read template
$type = GUICtrlRead($Combo1)
Local $template
If Not _FileReadToArray(@ScriptDir & "\template-" & $type & ".txt", $template) Then
MsgBox(4096, "Error", "Error " & @error)
EndIf
$source = GUICtrlRead($Edit1)
$regexFile = @ScriptDir & "\regex-" & $type & ".ini"
; read values
For $i = UBound($template) - 2 To 2 Step -1
$parts = StringSplit($template[$i], "=")
$id = StringStripWS($parts[1],
; 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
$template[$i] = $id & "=" & $sum & ","
Else
_ArrayDelete($template, $i)
EndIf
Next
; build result
; (generate id)
$template[1] = StringReplace($template[1], "$id$", _TimeToTicks(@HOUR,@MIN,@SEC))
; show result
$entry = ""
For $i = 1 To UBound($template) - 1
$entry &= StringStripWS($template[$i], 7) & @CRLF
Next
_GUICtrlEdit_SetText($Edit2, $entry)
; 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