MarcEdit 5.9 Update – ALA Edition

While all you suckers are stuck in Chicago, I figured I’d take a few minutes between caving in Ohio and chatting with my parents whom are visiting from Oregon to push out a MarcEdit update.  Nothing earth shattering…few bug fixes and a few enhancements.  Here’s the list:

  • Enhancement: Merge Record Function — enhanced editions check
  • Enhancement: Merge Record Function — adjusted matching parameters when dealing with ties
  • Enhancement: Swap Field Function — Added a new parameter to allow users to tell the swap field to work on one field (when dealing with multiple fields)
  • Enhancement: Swap Field Function — Added Regular expression support to the Modified Field Find option.
  • Enhancement: MarcValidator — Added additional information to the error output.  Specifically, when fields or records are identified as having invalid lengths — the program will provide the reported lengths and the actual values.
  • Bug Fix: MarcValidator — Corrected an error that would identify some items as having invalid field lengths when they actually were not
  • Bug Fix: Delimited Text Translator — Suppressed a debugging messagebox that hadn’t been disabled.

Few of the changes were around the swap field function.  The two to highlight, are the addition of the regular expressions when related to the modified field portion of the process, and the addition of a new option to help users control how data is swapped when dealing with multiple fields.  Here’s the new Swap field window:

image

In the Modified Data area, you will see a checkbox next to Find.  This allows for use of regular expression when evaluating fields for modification.  This can be used to test for the presence or lack of presence of data, to match patterns when determining if data should be swapped…I think that this will make the tool much more powerful. 

Additionally, you will find the addition of Process one field per swap added to the Options area.  This was added specifically for dealing with instances where you have multiple fields to swap and multiple destination fields, and you only want one of these values to be added to each field.  For example:

=949  \\$aTest1
=949  \\$aTest2
=952  \\$aField1
=952  \\$aField2

A users wanting to add the 949$a to the 952 — but add only one to a field — so test1 was added to field1 and test2 was added to field2 — the older process didn’t accommodate that.  The new process does by limiting the operation to one field.  So, as the program works procedurally, it will stop swapping each time it makes a replacement, and move on to the next field pair for processing.

As always, if you have MarcEdit’s automatic updates enabled, you will be prompted automatically.  If not, you can download the update from here:

–tr


Posted

in

by

Tags:

Comments

6 responses to “MarcEdit 5.9 Update – ALA Edition”

  1. Marc Avatar
    Marc

    Thank you very much for adding the swap field function. I can see this being very useful in the future and I think it might actually be relevant to a problem I am working on currently. However, I am not exactly sure how to solve it using this tool, so advice would be greatly appreciated:

    I have a file of records with multiple 500 fields, and each record has one 500 field that I would like to change to a 504. The 500s I would like to change would have some text like *bibliograph* in them. Is there a way to search for these particular 500s and change them to 504s, leaving the original data intact and not changing any of the other 500s?

    Forgive me if I am missing something simple.

    1. Terry Reese Avatar
      Terry Reese

      Honestly, there are a copy of options that you could use. Here’s what comes to mind right away:

      Copy Field Function (found in the MarcEditor/Tools menu)

      Field: 500
      Find in Field: bibliograph
      [Check the field to delete that data if you want to delete the source field after copy]

      Swap Field Function (found in the MarcEditor/Tools menu)
      Original Data:
      Field: 500
      Indicators: **
      Subfield: a [assuming that a is the only subfield present — otherwise, you need to list every subfield that might be present.]
      Find: bibliograph

      Modified Data:
      Field: 504
      Indicators: **
      Subfield: a

      Select the necessary options

      Process

      Replace Function (found in the MarcEditor/Edit/Replace menu)

      Find: (=500)(.*bibliograph.*)
      Replace: =504$2

      Select the use regular expression option.

      The copy field is likely the easiest, but any of these solutions would accomplish what you are doing.

      –tr

  2. Marc Avatar
    Marc

    So I have the regex I need:

    FIND: ^=500(.*[Bb]ibliograph.*$)
    REPLACE: =504\1

    But this doesn’t appear to work within MarcEdit. I can perform the find/replace in a text editor like Notepad++ then copy it back into MarcEdit, but is there any way to do this within MarcEdit?

    1. Terry Reese Avatar
      Terry Reese

      Regular expression support is different than Notepad+. You should look up the C# regular expression documentation to see the differences. Were I to write this one, it would look like this:

      Find: (=500)(.*[bB]ibliograph.*)
      Replace: =504$2

      –tr

      1. Marc Avatar
        Marc

        Aha! Yes, I was using the wrong syntax. Good to know. Also, thanks for pointing out that copy field tool. That is a much easier way to do what I wanted to do.

        Great work as always!

  3. Kevin McGrath Avatar
    Kevin McGrath

    Hi Terry,

    Thanks for MarcEdit…I’m looking forward to putting it to good use. I’m trying to install it on a Mac, but after going through the instructions, I’m getting the following error after mono MarcEdit.exe. I tried installing libgdiplus but Any help or suggestions are greatly appreciated!

    Unhandled Exception:
    System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.WindowsFormsSynchronizationContext —> System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.ThemeEngine —> System.ArgumentException: The requested FontFamily could not be found [GDI+ status: FontFamilyNotFound]
    at System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000] in :0
    at System.Drawing.FontFamily..ctor (GenericFontFamilies genericFamily) [0x00000] in :0
    at (wrapper remoting-invoke-with-check) System.Drawing.FontFamily:.ctor (System.Drawing.Text.GenericFontFamilies)
    at System.Drawing.FontFamily.get_GenericSansSerif () [0x00000] in :0
    at System.Drawing.Font.CreateFont (System.String familyName, Single emSize, FontStyle style, GraphicsUnit unit, Byte charSet, Boolean isVertical) [0x00000] in :0
    at System.Drawing.Font..ctor (System.String familyName, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont) [0x00000] in :0
    at System.Drawing.Font..ctor (System.String familyName, Single emSize, System.String systemName) [0x00000] in :0
    at (wrapper remoting-invoke-with-check) System.Drawing.Font:.ctor (string,single,string)
    at System.Drawing.SystemFonts.get_DefaultFont () [0x00000] in :0
    at System.Windows.Forms.Theme..ctor () [0x00000] in :0
    at System.Windows.Forms.ThemeWin32Classic..ctor () [0x00000] in :0
    at System.Windows.Forms.ThemeVisualStyles..ctor () [0x00000] in :0
    at System.Windows.Forms.ThemeEngine..cctor () [0x00000] in :0
    — End of inner exception stack trace —
    at System.Windows.Forms.SystemInformation.get_MenuAccessKeysUnderlined () [0x00000] in :0
    at System.Windows.Forms.Control..ctor () [0x00000] in :0
    at (wrapper remoting-invoke-with-check) System.Windows.Forms.Control:.ctor ()
    at System.Windows.Forms.WindowsFormsSynchronizationContext..cctor () [0x00000] in :0
    — End of inner exception stack trace —
    at System.Windows.Forms.Control..ctor () [0x00000] in :0
    at System.Windows.Forms.ScrollableControl..ctor () [0x00000] in :0
    at System.Windows.Forms.ContainerControl..ctor () [0x00000] in :0
    at System.Windows.Forms.Form..ctor () [0x00000] in :0
    at MarcEdit.frmMain..ctor () [0x00000] in :0
    at (wrapper remoting-invoke-with-check) MarcEdit.frmMain:.ctor ()
    at MarcEdit.SubMain.Main (System.String[] args) [0x00000] in :0
    [ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.WindowsFormsSynchronizationContext —> System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.ThemeEngine —> System.ArgumentException: The requested FontFamily could not be found [GDI+ status: FontFamilyNotFound]
    at System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000] in :0
    at System.Drawing.FontFamily..ctor (GenericFontFamilies genericFamily) [0x00000] in :0
    at (wrapper remoting-invoke-with-check) System.Drawing.FontFamily:.ctor (System.Drawing.Text.GenericFontFamilies)
    at System.Drawing.FontFamily.get_GenericSansSerif () [0x00000] in :0
    at System.Drawing.Font.CreateFont (System.String familyName, Single emSize, FontStyle style, GraphicsUnit unit, Byte charSet, Boolean isVertical) [0x00000] in :0
    at System.Drawing.Font..ctor (System.String familyName, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont) [0x00000] in :0
    at System.Drawing.Font..ctor (System.String familyName, Single emSize, System.String systemName) [0x00000] in :0
    at (wrapper remoting-invoke-with-check) System.Drawing.Font:.ctor (string,single,string)
    at System.Drawing.SystemFonts.get_DefaultFont () [0x00000] in :0
    at System.Windows.Forms.Theme..ctor () [0x00000] in :0
    at System.Windows.Forms.ThemeWin32Classic..ctor () [0x00000] in :0
    at System.Windows.Forms.ThemeVisualStyles..ctor () [0x00000] in :0
    at System.Windows.Forms.ThemeEngine..cctor () [0x00000] in :0
    — End of inner exception stack trace —
    at System.Windows.Forms.SystemInformation.get_MenuAccessKeysUnderlined () [0x00000] in :0
    at System.Windows.Forms.Control..ctor () [0x00000] in :0
    at (wrapper remoting-invoke-with-check) System.Windows.Forms.Control:.ctor ()
    at System.Windows.Forms.WindowsFormsSynchronizationContext..cctor () [0x00000] in :0
    — End of inner exception stack trace —
    at System.Windows.Forms.Control..ctor () [0x00000] in :0
    at System.Windows.Forms.ScrollableControl..ctor () [0x00000] in :0
    at System.Windows.Forms.ContainerControl..ctor () [0x00000] in :0
    at System.Windows.Forms.Form..ctor () [0x00000] in :0
    at MarcEdit.frmMain..ctor () [0x00000] in :0
    at (wrapper remoting-invoke-with-check) MarcEdit.frmMain:.ctor ()
    at MarcEdit.SubMain.Main (System.String[] args) [0x00000] in :0