I'M TRYING TO MOVE A RECORD STRING (SYSTEM.STRING) COMPOSED PARTIALLY FROM ESCAPED SEQUENCE, TO A COBOL GROUP ITEM STRUCTURE (REC-TAB) WITH COMP3 DATA ITEM.
I UNDERSTAND THE COMP3 COMPRESSION MECHANISM BUT I HAVE SOME PROBLEM WITH COBOL VALUE ASSIGNAMENT.
WITH HEX CHAR LOWER THAN "7F" IT LOOK FINE, BUT WITH HEX UPPER THEN "7F" LIKE "99" THE CHAR CONVERSION FAILS RETURNING STRANGE VALUES.
CORRECT WITH LOW VAL X'09776C2D31...
WAITING WITH HIGH VAL X'09996C2D31...
RESULT WITH HIGH VAL X'09C2996C2D31... WHY C2? WHILE I'M WAITING FOR X'09996C2D31...
I CANT'T FIND AN ALTERNATIVE HEX CONVERSION FUNCTION IN COBOL.
THANKS.
COBOL PROGRAM
IDENTIFICATION DIVISION.
PROGRAM-ID. Program1 AS "ConsoleApplication2.Program1".
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
REPOSITORY.
CLASS CLASS-String AS "System.String"
CLASS CLASS-PROVA AS "ClassLibrary4.Class1".
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CLS1 OBJECT REFERENCE CLASS-PROVA.
01 String-Object OBJECT REFERENCE CLASS-String.
01 Alphanumeric-Item PIC X(50).
01 REC-TAB.
05 MII-NUMBER PIC S9(004) COMP-3.
05 MII-DESCRIPTION PIC X(025).
05 MII-DECIMAL PIC S9(009)V9(02) COMP-3.
PROCEDURE DIVISION.
INVOKE CLASS-PROVA "NEW" RETURNING CLS1.
INVOKE CLS1 "GetValuesOK" RETURNING String-Object.
SET Alphanumeric-Item TO String-Object
MOVE Alphanumeric-Item TO REC-TAB
INVOKE CLS1 "GetValuesKO" RETURNING String-Object.
SET Alphanumeric-Item TO String-Object *PROBLEM COMVERTING ANSI CHAR HIGER THEN X"7F"
MOVE Alphanumeric-Item TO REC-TAB
END PROGRAM Program1.
C# PROGRAM
using System;
using System.Text;
namespace ClassLibrary4
{
public class Class1
{
public Class1(){}
public string GetValuesOK()
{
string tmpstr = "\u0009\u0077\u006C-12345678901234567890123-\u0000\u0002\u0067\u0065\u0043\u005D ";
return tmpstr;
}
public string GetValuesKO()
{ // HIGHER HIGHER
string tmpstr = "\u0009\u0099\u006C-12345678901234567890123-\u0000\u0009\u0087\u0065\u0043\u009D ";
return tmpstr;
}
}
}
I UNDERSTAND THE COMP3 COMPRESSION MECHANISM BUT I HAVE SOME PROBLEM WITH COBOL VALUE ASSIGNAMENT.
WITH HEX CHAR LOWER THAN "7F" IT LOOK FINE, BUT WITH HEX UPPER THEN "7F" LIKE "99" THE CHAR CONVERSION FAILS RETURNING STRANGE VALUES.
CORRECT WITH LOW VAL X'09776C2D31...
WAITING WITH HIGH VAL X'09996C2D31...
RESULT WITH HIGH VAL X'09C2996C2D31... WHY C2? WHILE I'M WAITING FOR X'09996C2D31...
I CANT'T FIND AN ALTERNATIVE HEX CONVERSION FUNCTION IN COBOL.
THANKS.
COBOL PROGRAM
IDENTIFICATION DIVISION.
PROGRAM-ID. Program1 AS "ConsoleApplication2.Program1".
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
REPOSITORY.
CLASS CLASS-String AS "System.String"
CLASS CLASS-PROVA AS "ClassLibrary4.Class1".
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CLS1 OBJECT REFERENCE CLASS-PROVA.
01 String-Object OBJECT REFERENCE CLASS-String.
01 Alphanumeric-Item PIC X(50).
01 REC-TAB.
05 MII-NUMBER PIC S9(004) COMP-3.
05 MII-DESCRIPTION PIC X(025).
05 MII-DECIMAL PIC S9(009)V9(02) COMP-3.
PROCEDURE DIVISION.
INVOKE CLASS-PROVA "NEW" RETURNING CLS1.
INVOKE CLS1 "GetValuesOK" RETURNING String-Object.
SET Alphanumeric-Item TO String-Object
MOVE Alphanumeric-Item TO REC-TAB
INVOKE CLS1 "GetValuesKO" RETURNING String-Object.
SET Alphanumeric-Item TO String-Object *PROBLEM COMVERTING ANSI CHAR HIGER THEN X"7F"
MOVE Alphanumeric-Item TO REC-TAB
END PROGRAM Program1.
C# PROGRAM
using System;
using System.Text;
namespace ClassLibrary4
{
public class Class1
{
public Class1(){}
public string GetValuesOK()
{
string tmpstr = "\u0009\u0077\u006C-12345678901234567890123-\u0000\u0002\u0067\u0065\u0043\u005D ";
return tmpstr;
}
public string GetValuesKO()
{ // HIGHER HIGHER
string tmpstr = "\u0009\u0099\u006C-12345678901234567890123-\u0000\u0009\u0087\u0065\u0043\u009D ";
return tmpstr;
}
}
}