|
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 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.