byte[] DDMWriteCallback.getRecordData(DDMCallbackEvent ddmce, int i) { String data = _reader.ReadLine(); byte[] returnData = ddmce.getFile().getRecordDataBuffer(); for (int idx = 0; idx < _format.getFieldCount(); idx++) { DDMField fld = _format.getField(idx); // SRCSEQ/SRCDAT have to be handled differently if ("SRCSEQ".Equals(fld.getName(), StringComparison.InvariantCultureIgnoreCase)) { fld.setString(String.Format("{0}", _sequence), returnData); _sequence += 1; } else if ("SRCDAT".Equals(fld.getName(), StringComparison.InvariantCultureIgnoreCase)) { fld.setString(String.Format("{0}", 0), returnData); } //if ("SRCDTA".Equals(fld.getName(), StringComparison.InvariantCultureIgnoreCase)) else { fld.setString(data, returnData); } } return(returnData); }
/// <summary> /// Returns a new copy of this record format, which includes a new copy of each DDMField. /// This is useful if multiple threads need to do field conversions on the same record format definition, /// since the DDMRecordFormat and DDMField classes are not thread-safe, each thread can be given its /// own copy of the record format, rather than using synchronization to share a single record format. /// /// </summary> public virtual DDMRecordFormat newCopy() { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final DDMField[] fields = new DDMField[this.fields_.length]; DDMField[] fields = new DDMField[this.fields_.Length]; for (int i = 0; i < this.fields_.Length; ++i) { fields[i] = this.fields_[i].newCopy(); } return(new DDMRecordFormat(this.library_, this.file_, this.name_, this.type_, this.text_, fields, this.totalLength_)); }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET: //ORIGINAL LINE: public void newRecord(final DDMCallbackEvent event, final DDMDataBuffer dataBuffer) public void newRecord(DDMCallbackEvent @event, DDMDataBuffer dataBuffer) { if (eof_) { return; } // int rfCount = Integer.valueOf(Conv.zonedDecimalToString(tempData, 28, 5, 0)); // WHCNT //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final byte[] tempData = dataBuffer.getRecordDataBuffer(); sbyte[] tempData = dataBuffer.RecordDataBuffer; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final int recordNumber = dataBuffer.getRecordNumber(); int recordNumber = dataBuffer.RecordNumber; if (fields_ == null) { int numFields = Convert.ToInt32(Conv.zonedDecimalToString(tempData, 361, 5, 0)); // WHNFLD fields_ = new DDMField[numFields]; name_ = Conv.ebcdicByteArrayToString(tempData, 46, 10); // WHNAME library_ = Conv.ebcdicByteArrayToString(tempData, 10, 10); // WHLIB file_ = Conv.ebcdicByteArrayToString(tempData, 0, 10); // WHFILE type_ = Conv.ebcdicByteArrayToString(tempData, 27, 1); // WHFTYP text_ = Conv.ebcdicByteArrayToString(tempData, 69, 50); // WHTEXT if (numFields == 0) { return; // Save files have no fields, for example. } } else if (recordNumber > fields_.Length) { //TODO - More than one record format, we'll support that later. eof_ = true; return; } string fieldName = Conv.ebcdicByteArrayToString(tempData, 139, 10).Trim(); // WHFLDE; int fieldByteLength = Convert.ToInt32(Conv.zonedDecimalToString(tempData, 159, 5, 0)); // WHFLDB int numDigits = Convert.ToInt32(Conv.zonedDecimalToString(tempData, 164, 2, 0)); // WHFLDO int decimalPositions = Convert.ToInt32(Conv.zonedDecimalToString(tempData, 166, 2, 0)); // WHFLDP string fieldText = Conv.ebcdicByteArrayToString(tempData, 168, 50); // WHFTXT //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final char fieldType = Conv.ebcdicByteArrayToString(tempData, 321, 1).charAt(0); char fieldType = Conv.ebcdicByteArrayToString(tempData, 321, 1)[0]; // WHFLDT int defaultValueLength = Convert.ToInt32(Conv.zonedDecimalToString(tempData, 402, 2, 0)); // WHDFTL string defaultValue = Conv.ebcdicByteArrayToString(tempData, 404, defaultValueLength > 30 ? 30 : defaultValueLength); // WHDFT int ccsid = Convert.ToInt32(Conv.packedDecimalToString(tempData, 491, 5, 0)); // WHCCSID string dateTimeFormat = Conv.ebcdicByteArrayToString(tempData, 494, 4); // WHFMT string dateTimeSeparator = Conv.ebcdicByteArrayToString(tempData, 498, 1); // WHSEP string variableLengthField = Conv.ebcdicByteArrayToString(tempData, 499, 1); // WHVARL int allocatedLength = Convert.ToInt32(Conv.packedDecimalToString(tempData, 500, 5, 0)); // WHALLC string allowNulls = Conv.ebcdicByteArrayToString(tempData, 503, 1); // WHNULL; if (ccsid == 65535) { ccsid = serverCCSID_; } fields_[recordNumber - 1] = new DDMField(totalLength_, fieldName, fieldByteLength, numDigits, decimalPositions, fieldText, fieldType, defaultValue, ccsid, variableLengthField, allocatedLength, allowNulls, dateTimeFormat, dateTimeSeparator); totalLength_ += fieldByteLength; // String alias = Conv.ebcdicByteArrayToString(tempData, 370,30); // WHALIS }
public override void newRecord(int recordNumber, byte[] recordData, bool[] nullFieldMap) { StringBuilder sb = new StringBuilder(); if (_format == null || _writer == null) { return; } // // Get in field order if specified. if (_fieldsLookup != null && _fieldsLookup.Count() > 0) { for (int fldidx = 0; fldidx < _fields.Length; fldidx++) { for (int idx = 0; idx < _format.getFieldCount(); idx++) { DDMField fld = _format.getField(idx); if (fld.getName().Equals(_fields[fldidx], StringComparison.InvariantCultureIgnoreCase)) { switch (fld.getType()) { case DDMField.TYPE_CHARACTER: case DDMField.TYPE_DBCS_OPEN: case DDMField.TYPE_DBCS_EITHER: case DDMField.TYPE_DBCS_GRAPHIC: case DDMField.TYPE_DBCS_ONLY: sb.Append(fld.getString(recordData).PadRight(fld.getLength())); break; default: // // Numeric, leading zero padded. sb.Append(fld.getString(recordData).PadLeft(fld.getNumberOfDigits(), '0')); break; } } } } } else { // // Just process fields in order in file. for (int idx = 0; idx < _format.getFieldCount(); idx++) { DDMField fld = _format.getField(idx); // // Process fields if no fields specified or // field name is in list passed. //if (_fieldsLookup == null || _fieldsLookup.Count() == 0 || // _fieldsLookup.ContainsKey(fld.getName())) { switch (fld.getType()) { case DDMField.TYPE_CHARACTER: case DDMField.TYPE_DBCS_OPEN: case DDMField.TYPE_DBCS_EITHER: case DDMField.TYPE_DBCS_GRAPHIC: case DDMField.TYPE_DBCS_ONLY: sb.Append(fld.getString(recordData).PadRight(fld.getLength())); break; default: // // Numeric, leading zero padded. sb.Append(fld.getString(recordData).PadLeft(fld.getNumberOfDigits(), '0')); break; } } } } _writer.WriteLine(sb.ToString()); }
//Returns true if successful public static bool UploadFile(string Local, string Remote) { if (ClientDDM != null && !ClientDDM.isClosed()) { string[] parts = Remote.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); string remotelib = parts[1].Replace(".lib", ""); string remotefile = parts[2].Replace(".file", ""); string remotembr = parts[3].Replace(".mbr", ""); try { DDMRecordFormat remotefmt = ClientDDM.getRecordFormat(remotelib, remotefile); if (remotefmt != null) { // At this stage - file does exist, we have to clear member first // Cross fingers we finish this out! if (!RemoteCommand("CLRPFM FILE(" + remotelib + "/" + remotefile + ") MBR(" + remotembr + ")")) { return(false); } DDMFile remote = ClientDDM.open(remotelib, remotefile, remotembr, remotefmt.getName(), DDMFile.WRITE_ONLY, false, 1, 1); if (remote != null) { // Open local file and pass to Writer StreamReader sr = new StreamReader(Local, Encoding.ASCII); int sequence = 1; //MyDDMWriteCallback writer = new MyDDMWriteCallback(sr, remotefmt); String data = sr.ReadLine(); while (data != null) { //ClientDDM.write(remote, writer); byte[] returnData = remote.getRecordDataBuffer(); // new byte[_format.getLength() + _format.getFieldCount()]; for (int idx = 0; idx < remotefmt.getFieldCount(); idx++) { DDMField fld = remotefmt.getField(idx); // SRCSEQ/SRCDAT have to be handled differently (as not stored locally yet) if ("SRCSEQ".Equals(fld.getName(), StringComparison.InvariantCultureIgnoreCase)) { fld.setString(sequence.ToString("000000"), returnData); sequence = sequence + 1; } else if ("SRCDAT".Equals(fld.getName(), StringComparison.InvariantCultureIgnoreCase)) { int dummyDate = 0; fld.setString(dummyDate.ToString("000000"), returnData); } //if ("SRCDTA".Equals(fld.getName(), StringComparison.InvariantCultureIgnoreCase)) else { fld.setString(data, returnData); } } bool[] nulls = new bool[remotefmt.getFieldCount()]; for (int idx = 0; idx < remotefmt.getFieldCount(); idx++) { nulls[idx] = false; } ClientDDM.write(remote, returnData, 0, nulls, null); data = sr.ReadLine(); } ClientDDM.close(remote); sr.Close(); } } } catch (Exception ex) { // Exception in writing return(false); } return(true); } else { return(false); } }