diff --git a/uk/ac/sanger/artemis/components/variant/BCFReader.java b/uk/ac/sanger/artemis/components/variant/BCFReader.java index b746e9a5e789f75c9cea283f49d4592f6ef50900..d68ca4bac5bb85e7579a1f188e280ceddaab2cf5 100644 --- a/uk/ac/sanger/artemis/components/variant/BCFReader.java +++ b/uk/ac/sanger/artemis/components/variant/BCFReader.java @@ -200,7 +200,7 @@ class BCFReader extends AbstractVCFReader if(bcfRecord.getAlt().isNonVariant()) nc = 1; - String fmts[] = bcfRecord.getFormat().split(":"); + String fmts[] = VCFRecord.COLON_PATTERN.split( bcfRecord.getFormat() ); bcfRecord.setData( new String[nsamples][fmts.length] ); for(int j=0; j<nsamples; j++) @@ -251,13 +251,28 @@ class BCFReader extends AbstractVCFReader buff.append((char)b[i]); } - String parts[] = buff.toString().replace(" ", " ").split(" "); - bcfRecord.setID( parts[0] ); - bcfRecord.setRef( parts[1] ); - bcfRecord.setAlt( parts[2] ); - bcfRecord.setFilter( parts[3] ); - bcfRecord.setInfo( parts[4] ); - bcfRecord.setFormat( parts[5] ); + int ind = 0; + int lastInd = 0; + int i = 0; + while((ind = buff.indexOf(" ", ind)) > -1) + { + switch( i ) + { + case 0: bcfRecord.setID(buff.substring(lastInd, ind)); break; + case 1: bcfRecord.setRef(buff.substring(lastInd, ind)); break; + case 2: bcfRecord.setAlt(buff.substring(lastInd, ind)); break; + case 3: bcfRecord.setFilter(buff.substring(lastInd, ind)); break; + case 4: bcfRecord.setInfo(buff.substring(lastInd, ind)); break; + case 5: bcfRecord.setFormat(buff.substring(lastInd, ind)); break; + default: return; + } + + ind++; + if(ind < buff.length() && buff.charAt(ind) == ' ') + ind++; + lastInd = ind; + i++; + } } /**