📄 record.java
字号:
set(name, Integer.valueOf(value));
else if (fieldType.equals("java.lang.Long") || fieldType.equals("Long"))
set(name, Long.valueOf(value));
else if (fieldType.equals("java.lang.Float") || fieldType.equals("Float"))
set(name, Float.valueOf(value));
else if (fieldType.equals("java.lang.Double") || fieldType.equals("Double"))
set(name, Double.valueOf(value));
else {
throw new IllegalArgumentException("Field type " + fieldType + " not currently supported. Sorry.");
}
}
public String getFixedString(String name) {
if (name == null)
return null;
if (getModelRecord() == null)
throw new IllegalArgumentException("Could not find modelrecord for field named \"" + name + "\"");
ModelField field = getModelRecord().getModelField(name);
if (field == null)
throw new IllegalArgumentException("Could not find model for field named \"" + name + "\"");
Object value = get(name);
if (value == null) {
return null;
}
String fieldType = field.type;
String str = null;
// first the custom types that need to be parsed
if (fieldType.equals("CustomTimestamp")) {
// a common timestamp format for flat files is with no separators: yyyyMMddHHmmss
SimpleDateFormat sdf = new SimpleDateFormat(field.format);
java.sql.Timestamp timestamp = (java.sql.Timestamp) value;
str = sdf.format(new Date(timestamp.getTime()));
} else if (fieldType.equals("CustomDate")) {
// a common date only format for flat files is with no separators: yyyyMMdd or MMddyyyy
SimpleDateFormat sdf = new SimpleDateFormat(field.format);
java.sql.Date date = (java.sql.Date) value;
str = sdf.format(new Date(date.getTime()));
} else if (fieldType.equals("CustomTime")) {
// a common time only format for flat files is with no separators: HHmmss
SimpleDateFormat sdf = new SimpleDateFormat(field.format);
java.sql.Time time = (java.sql.Time) value;
str = sdf.format(new Date(time.getTime()));
} else if (fieldType.equals("FixedPointDouble")) {
// this custom type will parse a fixed point number according to the number
// of decimal places in the formatting string then place it in a Double
NumberFormat nf = NumberFormat.getNumberInstance();
double decimalPlaces = Double.parseDouble(field.format);
double multiplier = Math.pow(10.0, decimalPlaces);
double dnum = multiplier * ((Double) value).doubleValue();
long number = Math.round(dnum);
str = padFrontZeros(Long.toString(number), field.length);
// if (Debug.infoOn()) Debug.logInfo("[Record.getFixedString] FixedPointDouble: multiplier=" + multiplier + ", value=" + value + ", dnum=" + dnum + ", number=" + number + ", str=" + str, module);
} // standard types
else if (fieldType.equals("java.lang.String") || fieldType.equals("String"))
str = value.toString();
else if (fieldType.equals("java.sql.Timestamp") || fieldType.equals("Timestamp"))
str = value.toString();
else if (fieldType.equals("java.sql.Time") || fieldType.equals("Time"))
str = value.toString();
else if (fieldType.equals("java.sql.Date") || fieldType.equals("Date"))
str = value.toString();
// for all numbers, pad front with zeros if field length is specified
else if (fieldType.equals("java.lang.Integer") || fieldType.equals("Integer"))
str = padFrontZeros(value.toString(), field.length);
else if (fieldType.equals("java.lang.Long") || fieldType.equals("Long"))
str = padFrontZeros(value.toString(), field.length);
else if (fieldType.equals("java.lang.Float") || fieldType.equals("Float"))
str = padFrontZeros(value.toString(), field.length);
else if (fieldType.equals("java.lang.Double") || fieldType.equals("Double"))
str = padFrontZeros(value.toString(), field.length);
else {
throw new IllegalArgumentException("Field type " + fieldType + " not currently supported. Sorry.");
}
if (str != null && field.length > 0 && str.length() < field.length) {
// pad the end with spaces
StringBuffer strBuf = new StringBuffer(str);
while (strBuf.length() < field.length)
strBuf.append(' ');
str = strBuf.toString();
}
return str;
}
public String writeLineString(ModelDataFile modelDataFile) throws DataFileException {
ModelRecord modelRecord = getModelRecord();
boolean isFixedRecord = ModelDataFile.SEP_FIXED_RECORD.equals(modelDataFile.separatorStyle);
boolean isFixedLength = ModelDataFile.SEP_FIXED_LENGTH.equals(modelDataFile.separatorStyle);
boolean isDelimited = ModelDataFile.SEP_DELIMITED.equals(modelDataFile.separatorStyle);
StringBuffer lineBuf = new StringBuffer();
for (int f = 0; f < modelRecord.fields.size(); f++) {
ModelField modelField = (ModelField) modelRecord.fields.get(f);
String data = this.getFixedString(modelField.name);
// if field is null (not set) then assume we want to pad the field
char PAD_CHAR = ' ';
if (data == null) {
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < modelField.length; i++)
sb.append(PAD_CHAR);
data = new String(sb);
}
// Pad the record
if (isFixedRecord) {
while (modelField.position > lineBuf.length())
lineBuf.append(" ");
}
// if (Debug.infoOn()) Debug.logInfo("Field: " + modelField.name + " Position: " + modelField.position + " BufLen: " + lineBuf.length(), module);
// if (Debug.infoOn()) Debug.logInfo("Got data \"" + data + "\" for field " + modelField.name + " in record " + modelRecord.name, module);
if (modelField.length > 0 && data.length() != modelField.length)
throw new DataFileException("Got field length " + data.length() + " but expected field length is " + modelField.length + " for field \"" +
modelField.name + "\" of record \"" + modelRecord.name + "\" data is: \"" + data + "\"");
lineBuf.append(data);
if (isDelimited)
lineBuf.append(modelDataFile.delimiter);
}
if ((isFixedRecord || isFixedLength) && modelDataFile.recordLength > 0 && lineBuf.length() != modelDataFile.recordLength)
throw new DataFileException("Got record length " + lineBuf.length() + " but expected record length is " + modelDataFile.recordLength +
" for record \"" + modelRecord.name + "\" data line is: \"" + lineBuf + "\"");
// for convenience, insert the type-code in where it is looked for, if exists
if (modelRecord.tcPosition > 0 && modelRecord.typeCode.length() > 0) {
lineBuf.replace(modelRecord.tcPosition, modelRecord.tcPosition + modelRecord.tcLength, modelRecord.typeCode);
}
if (isFixedLength || isDelimited)
lineBuf.append('\n');
return lineBuf.toString();
}
String padFrontZeros(String str, int totalLength) {
if (totalLength > 0 && str.length() < totalLength) {
// pad the front with zeros
StringBuffer zeros = new StringBuffer();
int numZeros = totalLength - str.length();
for (int i = 0; i < numZeros; i++)
zeros.append('0');
zeros.append(str);
return zeros.toString();
} else
return str;
}
public Record getParentRecord() {
return parentRecord;
}
public List getChildRecords() {
return childRecords;
}
public void addChildRecord(Record record) {
childRecords.add(record);
}
/** Creates new Record
* @param modelRecord
* @throws DataFileException Exception thown for various errors, generally has a nested exception
* @return
*/
public static Record createRecord(ModelRecord modelRecord) throws DataFileException {
Record record = new Record(modelRecord);
return record;
}
/** Creates new Record from existing fields Map
* @param modelRecord
* @param fields
* @throws DataFileException Exception thown for various errors, generally has a nested exception
* @return
*/
public static Record createRecord(ModelRecord modelRecord, Map fields) throws DataFileException {
Record record = new Record(modelRecord, fields);
return record;
}
/**
* @param line
* @param lineNum
* @param modelRecord
* @throws DataFileException Exception thown for various errors, generally has a nested exception
* @return
*/
public static Record createRecord(String line, int lineNum, ModelRecord modelRecord) throws DataFileException {
Record record = new Record(modelRecord);
for (int i = 0; i < modelRecord.fields.size(); i++) {
ModelField modelField = (ModelField) modelRecord.fields.get(i);
String strVal = null;
try {
strVal = line.substring(modelField.position, modelField.position + modelField.length);
} catch (IndexOutOfBoundsException ioobe) {
throw new DataFileException("Field " + modelField.name + " from " + modelField.position +
" for " + modelField.length + " chars could not be read from a line (" + lineNum + ") with only " +
line.length() + " chars.", ioobe);
}
try {
record.setString(modelField.name, strVal);
} catch (java.text.ParseException e) {
throw new DataFileException("Could not parse field " + modelField.name + ", format string \"" + modelField.format + "\" with value " + strVal +
" on line " + lineNum, e);
} catch (java.lang.NumberFormatException e) {
throw new DataFileException("Number not valid for field " + modelField.name + ", format string \"" + modelField.format + "\" with value " +
strVal + " on line " + lineNum, e);
}
}
return record;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -