X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Forg%2Fmarc4j%2FMarcStreamReader.java;h=9b6f637141a9213546a3c2adf1634cbfbf1c0786;hb=10af25f58982fc7284f05cb80b12126cf3ee95b7;hp=3fc1d9bd629eabe855f3359d8882d120361668da;hpb=0c435d66d7ffac54d3abbf9d949c5cb6f3f9baa4;p=marc4j.git diff --git a/src/org/marc4j/MarcStreamReader.java b/src/org/marc4j/MarcStreamReader.java index 3fc1d9b..9b6f637 100644 --- a/src/org/marc4j/MarcStreamReader.java +++ b/src/org/marc4j/MarcStreamReader.java @@ -28,9 +28,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; import org.marc4j.converter.CharConverter; import org.marc4j.converter.impl.AnselToUnicode; @@ -40,7 +37,6 @@ import org.marc4j.marc.Leader; import org.marc4j.marc.MarcFactory; import org.marc4j.marc.Record; import org.marc4j.marc.Subfield; -import org.marc4j.marc.VariableField; import org.marc4j.marc.impl.Verifier; /** @@ -87,6 +83,8 @@ public class MarcStreamReader implements MarcReader { private CharConverter converterAnsel = null; + private boolean setBadIndicators = true; + /** * Constructs an instance with the specified input stream. */ @@ -216,7 +214,7 @@ public class MarcStreamReader implements MarcReader { for (int i = 0; i < size; i++) { - int fieldLength = getFieldLength(inputrec); + //int fieldLength = getFieldLength(inputrec); if (Verifier.isControlField(tags[i])) { byteArray = new byte[lengths[i] - 1]; @@ -238,7 +236,10 @@ public class MarcStreamReader implements MarcReader { inputrec.readFully(byteArray); try { - record.addVariableField(parseDataField(tags[i], byteArray)); + DataField dataField = parseDataField(tags[i], byteArray); + // dataField could be null if bad indicators + if (dataField != null) + record.addVariableField(dataField); } catch (IOException e) { throw new MarcException( "error parsing data field for tag: " + tags[i] @@ -267,9 +268,16 @@ public class MarcStreamReader implements MarcReader { DataField dataField = factory.newDataField(); dataField.setTag(tag); - dataField.setIndicator1(ind1); - dataField.setIndicator2(ind2); + boolean badIndicatorFound = false; + if (setBadIndicators || ind1 >= ' ' ) + dataField.setIndicator1(ind1); + else + badIndicatorFound = true; + if (setBadIndicators || ind2 >= ' ') + dataField.setIndicator2(ind2); + else + badIndicatorFound = true; int code; int size; int readByte; @@ -298,9 +306,13 @@ public class MarcStreamReader implements MarcReader { break; } } + /* Bad Indicators was found, so dropping field */ + if (badIndicatorFound) + return null; return dataField; } + @SuppressWarnings("unused") private int getFieldLength(DataInputStream bais) throws IOException { bais.mark(9999); @@ -409,7 +421,12 @@ public class MarcStreamReader implements MarcReader { else if (encoding.equals("MARC-8") || encoding.equals("MARC8")) { if (converterAnsel == null) converterAnsel = new AnselToUnicode(); + + for (int index = 0; index < bytes.length; index++) + if (bytes[index] < 32) + bytes[index] = ' '; dataElement = converterAnsel.convert(bytes); + //dataElement = dataElement.replaceAll("\0", " "); } else if (encoding.equals("ISO-8859-1") || encoding.equals("ISO8859_1")) { @@ -422,5 +439,13 @@ public class MarcStreamReader implements MarcReader { } return dataElement; } + + public boolean isBadIndicators() { + return setBadIndicators; + } + + public void setBadIndicators(boolean trueFalse) { + this.setBadIndicators = trueFalse; + } } \ No newline at end of file