ucar.nc2.iosp.noaa.StructureDataRegexp Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of netcdf Show documentation
Show all versions of netcdf Show documentation
The NetCDF-Java Library is a Java interface to NetCDF files,
as well as to many other types of scientific data formats.
package ucar.nc2.iosp.noaa;
import ucar.ma2.*;
import ucar.unidata.util.StringUtil;
import java.util.regex.Matcher;
/**
* Class Description.
*
* @author caron
* @since Feb 26, 2011
*/
public class StructureDataRegexp extends StructureData {
protected Matcher matcher;
public StructureDataRegexp(StructureMembers members, Matcher m) {
super(members);
this.matcher = m;
}
protected Object parse(DataType dt, Ghcnm2.VinfoField vinfo) throws NumberFormatException {
return parse(dt, vinfo, vinfo.fldno);
}
protected Object parse(DataType dt, Ghcnm2.VinfoField vinfo, int fldno) throws NumberFormatException {
String svalue = (fldno < matcher.groupCount()) ? matcher.group(fldno) : " ";
// System.out.printf("HEY! %d>= %d %n", field, matcher.groupCount());
//String svalue = matcher.group(field);
if ((dt == DataType.STRING) || (dt == DataType.CHAR))
return svalue;
try {
svalue = StringUtil.remove(svalue, ' ');
boolean isBlank = (svalue.trim().length() == 0);
if (dt == DataType.DOUBLE)
return isBlank ? 0.0 : new Double(svalue);
else if (dt == DataType.FLOAT) {
float result = isBlank ? 0.0f : new Float(svalue);
return (vinfo.hasScale) ? result * vinfo.scale : result;
} else if (dt == DataType.INT) {
return isBlank ? 0 : new Integer(svalue);
}
else if (dt == DataType.LONG)
return isBlank ? 0 : new Long(svalue);
} catch (NumberFormatException e) {
System.out.printf(" %d = <%s> %n", fldno, svalue);
throw e;
}
return null;
}
@Override
public Array getArray(StructureMembers.Member m) {
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
if (m.getDataType() == DataType.STRING) {
String result = matcher.group(f.fldno);
return new ArrayObject(String.class, new int[] {}, new Object[] {result.trim()});
} else if (m.getDataType() == DataType.SEQUENCE) {
return getArraySequence(m);
} else if (!m.isScalar()) {
if (m.getDataType() == DataType.FLOAT) {
float[] ja = getJavaArrayFloat(m);
return Array.factory(DataType.FLOAT, m.getShape(), ja);
} else if (m.getDataType() == DataType.CHAR) {
char[] ja = getJavaArrayChar(m);
return Array.factory(DataType.CHAR, m.getShape(), ja);
} else if (m.getDataType() == DataType.BYTE) {
byte[] ja = getJavaArrayByte(m);
return Array.factory(DataType.BYTE, m.getShape(), ja);
}
}
Object result = parse(m.getDataType(), f);
if (m.getDataType() == DataType.CHAR)
return new ArrayChar((String) result);
else
return new ArrayScalar(result);
}
@Override
public float convertScalarFloat(StructureMembers.Member m) {
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
return ((Number) parse(m.getDataType(), f)).floatValue();
}
@Override
public double convertScalarDouble(StructureMembers.Member m) {
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
return ((Number) parse(m.getDataType(), f)).doubleValue();
}
@Override
public int convertScalarInt(StructureMembers.Member m) {
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
return ((Number) parse(m.getDataType(), f)).intValue();
}
@Override
public long convertScalarLong(StructureMembers.Member m) {
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
return ((Number) parse(m.getDataType(), f)).longValue();
}
@Override
public double getScalarDouble(StructureMembers.Member m) {
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
return (Double) parse(m.getDataType(), f);
}
@Override
public double[] getJavaArrayDouble(StructureMembers.Member m) {
return new double[0]; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public float getScalarFloat(StructureMembers.Member m) {
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
Object result = parse(m.getDataType(), f);
return (result instanceof Float) ? (Float) result : ((Double) result).floatValue();
}
@Override
public float[] getJavaArrayFloat(StructureMembers.Member m) {
int n = m.getSize();
float[] result = new float[n];
Ghcnm2.VinfoField f = (Ghcnm2.VinfoField) m.getDataObject();
for (int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy