. defines the parsed field for the last name value. Again, nothing new here; we extract the value up to but not including the next semicolon and give a fixed length of 12.
For the first record, Ritz followed by eight blanks is extracted into.The OVERLAy parameter of the INREC statement uses the extracted values in the, and fields to make copies of these fields at the end of each record (starting at position 41):. The (last name) value is placed in positions 41 through 52. For the first record, Ritz followed by eight blanks is placed in those positions.
The (first name and middle initial) value is placed in positions 55 through 66. For the first record, Sue V followed by seven blanks is placed in those positions. We could just copy the (left-justified amount) value as is and use UFF to SORT it directly as a 12-byte numeric value. But to demonstrate how you can edit%nn values in the same ways you can edit p,m values, we convert the value to a 4-byte Pd value in positions 70 through 73 using%0 0,UFF,To=Pd,LEnGTh=4. Remember that parse extracts numeric values into left-justified fixed length values, so you want to use the UFF or SFF format to handle them. For the first record, PL4’16786’ (X’0016786C’) is placed in positions 70 to 73.The SORT statement SORTs on the copy of the last name value in positions 41 through 52, then on the copy of the first name and middle initial value in positions 55 through 66, and finally on the Pd amount value in positions 70 through 73.
The OUTREC statement just removes the extra bytes we added, since we don’t want them in the output records. Figure 2 shows the resulting output records.Creating a Report From Keyword Delimited FieldsOur final example is a bit more challenging.
It shows how to deal with keyword- delimited fields that can appear in any order or not appear at all. Figure 3 shows an input file with RECFM=FB and LRECL=80. There are five possible keywords: First=value for the first name, middle=value for the middle name, Last=value for the last name, and Profit=value or Loss=value for a profit (+) or loss (-) amount. The keywords can appear in any order. Middle=value can be missing.
Either Profit=value or Loss=value can appear, or both can be missing.We want to produce a report showing first name, middle name (blanks if missing), last name, and profit or loss in a new format (0.00 if missing). Since the keywords can appear in any order or not at all, we can’t just parse the fields in order as we did in the other examples. We need to start looking for each keyword in position 1. We could use ABSPOS=1 for each%nn field to do that.
However, with a regular PARSE parameter, if a%nn field isn’t found in the record, subsequent%nn fields are ignored. So, if we didn’t find middle=, we’d just stop and all subsequent%nn values would be blank. We need a way to continue parsing subsequent%nn fields when a%nn field is missing. The solution is to use IFTHEN clauses as discussed in my previous article titled “DFSORT: IFTHEN, numeric Tests & Relative dates” ( z/Journal April/may 2007). PARSE can be used in IFTHEN clauses along with WHEN, BUILD, and OVERLAy.
Each IFTHEN PARSE starts parsing at position 1 by default. With WHEN=INIT (or HIT=NEXT) if we don’t find what we’re looking for in an IFTHEN clause, we still continue to the next IFTHEN clause.Figure 3 shows the DFSORT OUTFIL statement for the report. The HEAdER2 parameter sets up the page headings for the report in the normal way. We use separate IFTHEN clauses with WHEN=InIT and a PARSE parameter that defines the%nn field for each keyword.
WHEN=InIT tells DFSORT to process the IFTHEN clause for every record. Here’s what the IFTHEN PARSE parameter does for each IFTHEN clause.
You could turn the double array into a byte., but that still won't quite get you there, as the managed hash generatorsrequire a managed byte array (byte). If you want to stick to the managed hash generation, a copy is really the only way to get there.If this is really critical (ie: you're hashing MUCH larger arrays than your example), you could P/Invoke the native crypt hashing functions, ie:, etc. This would allow you to use unsafe code, turn your data into a double., cast to byte., and p/invoke with that.If a post answers your question, please click ' Mark As Answer' on that post and ' Mark as Helpful'. Hallo ReedHmm.
Dfsort 4 Byte Pd Convert To 8 Byte File
Would it be possible to use the P/Invoke idea to convert double, into byte?I like your idea but it would require multiple native API calls. PS My double array is 2K by 2K.OlafUnfortunately no - managed arrays are always managed - the only way to create them is via the CLR, which is going to mean you always must copy if you want to put data into a byte.Basically, you have to copy, or revert to native. There is unfortunately no other way to get there.If a post answers your question, please click ' Mark As Answer' on that post and ' Mark as Helpful'.