× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Joe - Thanks for the help,it works great.

-------------- Original message -------------- 

> Unfortunately, sometimes reading the API's gives only half the story. You've 
> got 
> to have a feel for what they mean, and I didn't. Now I do; thanks. I'll give 
> it 
> a shot sometime today or this evening. 
> As for the Olympics, they'll be talking about the men's gymnastics for a 
> while, 
> I'm sure. 
> Thanks 
> Bob 
> -------------- Original message -------------- 
> 
> > 
> > Hi Bob, 
> > 
> > Sorry for the delay, blame those pesky clients ( who believe our 24/7 
> > claims ) and the Olympics. 
> > 
> > I thought I had been reasonably clear before, but I'll step through it. 
> > A few things first: 
> > 
> > * Read the binary file with no encoding specified. This still uses the 
> > default encoding, but the net effect is no translation of the binary data. 
> > That's what you want, because you will be converting the data yourself. 
> > 
> > * Don't use BinaryConverter. As I mentioned in my previous message, it 
> > doesn't understand BCD and the effective output for this purpose is 
> > garbage. 
> > 
> > * Read the API's. AS400PackedDecimal wants the number of digits, not 
> > the field length. 
> > 
> > Steps: 
> > 
> > Get a FileInputStream ( with buffering for efficiency ) on the binary 
> > file. 
> > 
> > Loop until read receives -1 for EOF. 
> > 
> > Read for the record length into a record-sized byte array. 
> > 
> > For Strings, use the constructor that takes a byte array, offset, length 
> > and encoding. I use "Cp500", but whatever works for you. 
> > 
> > For the packed fields, use an AS400PackedDecimal variable with the 
> > proper number of digits and decimal positions. From your example, use 
> > 
> > a4PD = new AS400PackedDecimal( 7, 0 ); 
> > 
> > Then use AS400PackedDecimal.toDouble(byte[] as400Value, int offset) 
> > and cast to an int 
> > 
> > or 
> > 
> > use AS400PackedDecimal.toObject(byte[] as400Value, int offset) and get 
> > the intValue() from the returned BigDecimal. 
> > 
> > Repeat as appropriate for each field in the record. 
> > 
> > end of Loop. 
> > 
> > 
> > Joe Sam 
> > 
> > Joe Sam Shirah - http://www.conceptgo.com 
> > conceptGO - Consulting/Development/Outsourcing 
> > Java Filter Forum: http://www.ibm.com/developerworks/java/ 
> > Just the JDBC FAQs: http://www.jguru.com/faq/JDBC 
> > Going International? http://www.jguru.com/faq/I18N 
> > Que Java400? http://www.jguru.com/faq/Java400 
> > 
> > 
> > ----- Original Message ----- 
> > From: 
> > To: "Java Programming on and around the iSeries / AS400" 
> > 
> > Sent: Tuesday, August 24, 2004 9:00 AM 
> > Subject: Re: Help w/ Packed Decimal 
> > 
> > 
> > > Thanks Joe and Mark - 
> > > First a little background: The field is 4 bytes long packed, 7 unpacked. 
> > It's an integer value, so no decimals (Although I have dollar amounts to 
> > deal with if I get past this). I've tried the below code three different 
> > ways: 
> > > 1) Reading the file that had been converted to ASCII 
> > > 2) Reading the binary file, with encoding set to "IBM1047" 
> > > 3) Reading the binary file, with no encoding. 
> > > Here's the code I'm using: 
> > > String strValue = rec.substring (from-1, to); 
> > > System.out.println("strValue = " + BinaryConverter.bytesToString 
> > (strValue.getBytes () )); 
> > > AS400PackedDecimal pd = new AS400PackedDecimal (4,0); 
> > > double pdNum = pd.toDouble (BinaryConverter.stringToBytes (strValue)); 
> > > System.out.println ("Packed Decimal = " + pdNum); 
> > > And the result (From all three attempts) : 
> > > strValue = 0000000C 
> > > java.lang.NumberFormatException 
> > > at 
> > com.ibm.as400.access.BinaryConverter.stringToBytes(BinaryConverter.java:531)
> >  
> > > at 
> > com.ibm.as400.access.BinaryConverter.stringToBytes(BinaryConverter.java:485)
> >  
> > > at 
> > com.ibm.as400.access.BinaryConverter.stringToBytes(BinaryConverter.java:478)
> >  
> > > at gcs.ParseCAT_GLS.parseRecord(ParseCAT_GLS.java:142) 
> > > at gcs.ParseCAT_GLS.parseRecord(ParseCAT_GLS.java:160) 
> > > at gcs.ParseCAT_GLS.parseRecord(ParseCAT_GLS.java:160) 
> > > at gcs.ParseCAT_GLS.getNextRecord(ParseCAT_GLS.java:117) 
> > > at gcs.TransformCAT_GLS.main(TransformCAT_GLS.java:44) 
> > > Exception in thread "main" 
> > > I thought about trying to create a SequentialFile object along with a 
> > RecordFormat object, but that requires a connection to a server. 
> > > -------------- Original message -------------- 
> > > 
> > > > 
> > > > Hi Bob, 
> > > > 
> > > > You need to bring the file across as binary and then do a field by 
> > > > field 
> > > > conversion using the String and 
> > > > com.ibm.as400.access.AS400PackedDecimal classes. 
> > > > 
> > > > If you bring it down as text, each byte, typically, is converted to 
> > > > ASCII. That doesn't work for true numeric fields because they aren't 
> > > > characters but binary values that don't map to a character set. The 
> > > > same 
> > is 
> > > > true for a non-EBCDIC file that contains numbers and characters, and is 
> > why 
> > > > trying to just use an encoding translation on that kind of file doesn't 
> > > > work. 
> > > > 
> > > > As Mark indicated, BinaryConverter doesn't understand that C, D and/or 
> > > > F 
> > > > are sign indicators and takes them at their hex value. While we are 
> > > > accustomed to 'F' for positive values on the '400, 'C' is an explicit 
> > > > positive used often on mainframes. If my recollection is correct, any 
> > value 
> > > > other than 'D' is taken as positive. 
> > > > 
> > > > Have fun, 
> > > > 
> > > > 
> > > > Joe Sam 
> > > > 
> > > > Joe Sam Shirah - http://www.conceptgo.com 
> > > > conceptGO - Consulting/Development/Outsourcing 
> > > > Java Filter Forum: http://www.ibm.com/developerworks/java/ 
> > > > Just the JDBC FAQs: http://www.jguru.com/faq/JDBC 
> > > > Going International? http://www.jguru.com/faq/I18N 
> > > > Que Java400? http://www.jguru.com/faq/Java400 
> > > > 
> > > > 
> > > > ----- Original Message ----- 
> > > > From: "Bob Szemethy" 
> > > > To: 
> > > > Sent: Monday, August 23, 2004 10:51 PM 
> > > > Subject: Help w/ Packed Decimal 
> > > > 
> > > > 
> > > > > Hi all - 
> > > > > 
> > > > > A quick question about a flat file built on a S/390, that I am trying 
> > to 
> > > > > process on a Windows box using JTOpen. 
> > > > > 
> > > > > I have access to the file only though an FTP applet that our HQ 
> > > > > maintains, and I pulled the file down as text and as binary. When I'm 
> > > > > processing the file, I have no trouble with the text fields, but 
> > > > > there 
> > > > > are some packed decimal fields that are not coming across. 
> > > > > 
> > > > > I also was able to parse the binary file when I set the encoding to 
> > > > > "IBM1047", but had the same problem with the packed fileds. 
> > > > > 
> > > > > I tried the BinaryConverter class, and the method to convert to Hex 
> > > > > string for the byte array, and for the text and binary files, it 
> > returns 
> > > > > the following sting for a 4 byte number : "0000000C", which I 
> > understand 
> > > > > to be 12, but I know the number should be 1. 
> > > > > 
> > > > > So my question is this: Can I parse a packed-decimal field in a file 
> > > > > that has been translated to ASCII or Unicode? Thanks for any help. 
> > > > > 
> > > > > Bob 
> > > > > 
> > 
> > 
> > 
> > 
> > 
> > -- 
> > This is the Java Programming on and around the iSeries / AS400 (JAVA400-L) 
> > mailing list 
> > To post a message email: JAVA400-L@xxxxxxxxxxxx 
> > To subscribe, unsubscribe, or change list options, 
> > visit: http://lists.midrange.com/mailman/listinfo/java400-l 
> > or email: JAVA400-L-request@xxxxxxxxxxxx 
> > Before posting, please take a moment to review the archives 
> > at http://archive.midrange.com/java400-l. 
> > 
> -- 
> This is the Java Programming on and around the iSeries / AS400 (JAVA400-L) 
> mailing list 
> To post a message email: JAVA400-L@xxxxxxxxxxxx 
> To subscribe, unsubscribe, or change list options, 
> visit: http://lists.midrange.com/mailman/listinfo/java400-l 
> or email: JAVA400-L-request@xxxxxxxxxxxx 
> Before posting, please take a moment to review the archives 
> at http://archive.midrange.com/java400-l. 
> 

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.