/** * Create an ArrayChar from an ArrayObject of Strings. * * @param values ArrayObject of String * @return equivilent ArrayChar, using maximum length of String. Unused are zero filled. */ public static ArrayChar makeFromStringArray(ArrayObject values) { // find longest string IndexIterator ii = values.getIndexIterator(); int strlen = 0; while (ii.hasNext()) { String s = (String) ii.next(); strlen = Math.max(s.length(), strlen); } return makeFromStringArray(values, strlen); }
/** * Create an ArrayChar from an ArrayObject of Strings. * * @param values ArrayObject of String * @return equivilent ArrayChar, using maximum length of String. Unused are zero filled. */ public static ArrayChar makeFromStringArray(ArrayObject values) { // find longest string IndexIterator ii = values.getIndexIterator(); int strlen = 0; while (ii.hasNext()) { String s = (String) ii.next(); strlen = Math.max(s.length(), strlen); } return makeFromStringArray(values, strlen); }
/** * Create an ArrayChar from an ArrayObject of Strings. * * @param values ArrayObject of String * @return equivilent ArrayChar, using maximum length of String. Unused are zero filled. */ public static ArrayChar makeFromStringArray(ArrayObject values) { // find longest string IndexIterator ii = values.getIndexIterator(); int strlen = 0; while (ii.hasNext()) { String s = (String) ii.next(); strlen = Math.max(s.length(), strlen); } return makeFromStringArray(values, strlen); }
/** * Write String data to a CHAR variable. Must not be in define mode. * * @param fullNameEsc name of variable, must be of type CHAR. * @param origin offset to start writing, ignore the strlen dimension. * @param values write this array; must be ArrayObject of String * @throws IOException if I/O error * @throws ucar.ma2.InvalidRangeException if values Array has illegal shape */ public void writeStringData(String fullNameEsc, int[] origin, Array values) throws java.io.IOException, InvalidRangeException { if (values.getElementType() != String.class) throw new IllegalArgumentException("Must be ArrayObject of String "); ucar.nc2.Variable v2 = findVariable(fullNameEsc); if (v2 == null) throw new IllegalArgumentException("illegal variable name = " + fullNameEsc); if (v2.getDataType() != DataType.CHAR) throw new IllegalArgumentException("variable " + fullNameEsc + " is not type CHAR"); int rank = v2.getRank(); int strlen = v2.getShape(rank-1); // turn it into an ArrayChar ArrayChar cvalues = ArrayChar.makeFromStringArray((ArrayObject) values, strlen); int[] corigin = new int[rank]; System.arraycopy(origin, 0, corigin, 0, rank - 1); write(fullNameEsc, corigin, cvalues); }
/** * Write String data to a CHAR variable. Must not be in define mode. * * @param v variable to write to * @param origin offset to start writing, ignore the strlen dimension. * @param values write this array; must be ArrayObject of String * @throws IOException if I/O error * @throws ucar.ma2.InvalidRangeException if values Array has illegal shape */ public void writeStringData(Variable v, int[] origin, Array values) throws java.io.IOException, InvalidRangeException { if (values.getElementType() != String.class) throw new IllegalArgumentException("Must be ArrayObject of String "); if (v.getDataType() != DataType.CHAR) throw new IllegalArgumentException("variable " + v.getFullName() + " is not type CHAR"); int rank = v.getRank(); int strlen = v.getShape(rank-1); // turn it into an ArrayChar ArrayChar cvalues = ArrayChar.makeFromStringArray((ArrayObject) values, strlen); int[] corigin = new int[rank]; System.arraycopy(origin, 0, corigin, 0, rank - 1); write(v, corigin, cvalues); }
/** * Write String data to a CHAR variable. Must not be in define mode. * * @param v variable to write to * @param origin offset to start writing, ignore the strlen dimension. * @param values write this array; must be ArrayObject of String * @throws IOException if I/O error * @throws ucar.ma2.InvalidRangeException if values Array has illegal shape */ public void writeStringData(Variable v, int[] origin, Array values) throws java.io.IOException, InvalidRangeException { if (values.getElementType() != String.class) throw new IllegalArgumentException("Must be ArrayObject of String "); if (v.getDataType() != DataType.CHAR) throw new IllegalArgumentException("variable " + v.getFullName() + " is not type CHAR"); int rank = v.getRank(); int strlen = v.getShape(rank - 1); // turn it into an ArrayChar ArrayChar cvalues = ArrayChar.makeFromStringArray((ArrayObject) values, strlen); int[] corigin = new int[rank]; System.arraycopy(origin, 0, corigin, 0, rank - 1); write(v, corigin, cvalues); }
/** * Write String data to a CHAR variable. Must not be in define mode. * * @param fullNameEsc name of variable, must be of type CHAR. * @param origin offset to start writing, ignore the strlen dimension. * @param values write this array; must be ArrayObject of String * @throws IOException if I/O error * @throws ucar.ma2.InvalidRangeException if values Array has illegal shape */ public void writeStringData(String fullNameEsc, int[] origin, Array values) throws java.io.IOException, InvalidRangeException { if (values.getElementType() != String.class) throw new IllegalArgumentException("Must be ArrayObject of String "); ucar.nc2.Variable v2 = findVariable(fullNameEsc); if (v2 == null) throw new IllegalArgumentException("illegal variable name = " + fullNameEsc); if (v2.getDataType() != DataType.CHAR) throw new IllegalArgumentException("variable " + fullNameEsc + " is not type CHAR"); int rank = v2.getRank(); int strlen = v2.getShape(rank-1); // turn it into an ArrayChar ArrayChar cvalues = ArrayChar.makeFromStringArray((ArrayObject) values, strlen); int[] corigin = new int[rank]; System.arraycopy(origin, 0, corigin, 0, rank - 1); write(fullNameEsc, corigin, cvalues); }
/** * Write String data to a CHAR variable. Must not be in define mode. * * @param fullNameEsc name of variable, must be of type CHAR. * @param origin offset to start writing, ignore the strlen dimension. * @param values write this array; must be ArrayObject of String * @throws IOException if I/O error * @throws ucar.ma2.InvalidRangeException if values Array has illegal shape */ public void writeStringData(String fullNameEsc, int[] origin, Array values) throws java.io.IOException, InvalidRangeException { if (values.getElementType() != String.class) throw new IllegalArgumentException("Must be ArrayObject of String "); ucar.nc2.Variable v2 = findVariable(fullNameEsc); if (v2 == null) throw new IllegalArgumentException("illegal variable name = " + fullNameEsc); if (v2.getDataType() != DataType.CHAR) throw new IllegalArgumentException("variable " + fullNameEsc + " is not type CHAR"); int rank = v2.getRank(); int strlen = v2.getShape(rank-1); // turn it into an ArrayChar ArrayChar cvalues = ArrayChar.makeFromStringArray((ArrayObject) values, strlen); int[] corigin = new int[rank]; System.arraycopy(origin, 0, corigin, 0, rank - 1); write(fullNameEsc, corigin, cvalues); }
/** * Write String data to a CHAR variable. Must not be in define mode. * * @param v variable to write to * @param origin offset to start writing, ignore the strlen dimension. * @param values write this array; must be ArrayObject of String * @throws IOException if I/O error * @throws ucar.ma2.InvalidRangeException if values Array has illegal shape */ public void writeStringData(Variable v, int[] origin, Array values) throws java.io.IOException, InvalidRangeException { if (values.getElementType() != String.class) throw new IllegalArgumentException("Must be ArrayObject of String "); if (v.getDataType() != DataType.CHAR) throw new IllegalArgumentException("variable " + v.getFullName() + " is not type CHAR"); int rank = v.getRank(); int strlen = v.getShape(rank - 1); // turn it into an ArrayChar ArrayChar cvalues = ArrayChar.makeFromStringArray((ArrayObject) values, strlen); int[] corigin = new int[rank]; System.arraycopy(origin, 0, corigin, 0, rank - 1); write(v, corigin, cvalues); }
protected int writeStructureDataClassic(Map<String, Variable> varMap, int[] origin, StructureData sdata) throws IOException, InvalidRangeException { for (StructureMembers.Member m : sdata.getMembers()) { Variable mv = varMap.get(m.getName()); if (mv == null) continue; // LOOK OK?? Array org = sdata.getArray(m); if (m.getDataType() == DataType.STRING) { // convert to ArrayChar org = ArrayChar.makeFromStringArray((ArrayObject) org); } Array orgPlus1 = Array.makeArrayRankPlusOne(org); // add dimension on the left (slow) int[] useOrigin = origin; if (org.getRank() > 0) { // if rank 0 (common case, this is a nop, so skip useOrigin = new int[org.getRank()+1]; useOrigin[0] = origin[0]; // the rest are 0 } writer.write(mv, useOrigin, orgPlus1); } return origin[0]; }
protected int writeStructureDataClassic(Map<String, Variable> varMap, int[] origin, StructureData sdata) throws IOException, InvalidRangeException { for (StructureMembers.Member m : sdata.getMembers()) { Variable mv = varMap.get(m.getName()); if (mv == null) continue; // LOOK OK?? Array org = sdata.getArray(m); if (m.getDataType() == DataType.STRING) { // convert to ArrayChar org = ArrayChar.makeFromStringArray((ArrayObject) org); } Array orgPlus1 = Array.makeArrayRankPlusOne(org); // add dimension on the left (slow) int[] useOrigin = origin; if (org.getRank() > 0) { // if rank 0 (common case, this is a nop, so skip useOrigin = new int[org.getRank()+1]; useOrigin[0] = origin[0]; // the rest are 0 } writer.write(mv, useOrigin, orgPlus1); } return origin[0]; }
private void writeRecordData(ucar.nc2.Structure s, int recnum, StructureData sdata) throws java.io.IOException, ucar.ma2.InvalidRangeException { StructureMembers members = sdata.getStructureMembers(); // loop over members for (Variable vm : s.getVariables()) { StructureMembers.Member m = members.findMember(vm.getShortName()); if (null == m) continue; // this means that the data is missing from the ArrayStructure // convert String member data into CHAR data Array data = sdata.getArray(m); if (data instanceof ArrayObject && vm.getDataType() == DataType.CHAR && vm.getRank() > 0) { int strlen = vm.getShape(vm.getRank() - 1); data = ArrayChar.makeFromStringArray((ArrayObject) data, strlen); // turn it into an ArrayChar } // layout of the destination N3header.Vinfo vinfo = (N3header.Vinfo) vm.getSPobject(); long begin = vinfo.begin + recnum * header.recsize; // this assumes unlimited dimension Section memberSection = vm.getShapeAsSection(); Layout layout = new LayoutRegular(begin, vm.getElementSize(), vm.getShape(), memberSection); try { writeData(data, layout, vm.getDataType()); } catch (Exception e) { log.error("Error writing member="+vm.getShortName()+" in struct="+s.getFullName(), e); throw new IOException(e); } } }
private void writeRecordData(ucar.nc2.Structure s, int recnum, StructureData sdata) throws java.io.IOException, ucar.ma2.InvalidRangeException { StructureMembers members = sdata.getStructureMembers(); // loop over members for (Variable vm : s.getVariables()) { StructureMembers.Member m = members.findMember(vm.getShortName()); if (null == m) continue; // this means that the data is missing from the ArrayStructure // convert String member data into CHAR data Array data = sdata.getArray(m); if (data instanceof ArrayObject && vm.getDataType() == DataType.CHAR && vm.getRank() > 0) { int strlen = vm.getShape(vm.getRank() - 1); data = ArrayChar.makeFromStringArray((ArrayObject) data, strlen); // turn it into an ArrayChar } // layout of the destination N3header.Vinfo vinfo = (N3header.Vinfo) vm.getSPobject(); long begin = vinfo.begin + recnum * header.recsize; // this assumes unlimited dimension Section memberSection = vm.getShapeAsSection(); Layout layout = new LayoutRegular(begin, vm.getElementSize(), vm.getShape(), memberSection); try { writeData(data, layout, vm.getDataType()); } catch (Exception e) { log.error("Error writing member="+vm.getShortName()+" in struct="+s.getFullName(), e); throw new IOException(e); } } }