2013-10-08 16 views
1

我有一個下面的數量列表的平面文件,請問,請告訴我,以{,A,H,E,C結尾的charectors是什麼意思,我,F,我怎麼能把這個下面的數量列表成兩點十進制值,如1234567.80?通過使用C#或BizTalk Functoids將字符串轉換爲十進制值

12345678{ 
00484326A 
00000210H 
00000185A 
00000077E 
00000833C 
00000255I 
00000077E 
00000039F 
00000088A 
00000000F 
00000000A 
00000100{ 

我試過了下面的方法,我可以放置「。」在所有這些子串之間,出於某種原因,我想以某種動態的方式嘗試在我的應用程序中看不到某些問題。

string decimalstring = "12345678{"; 
decimalstring = decimalstring.Replace("{", "0"); 
int String1 = Convert.ToInt32(decimalstring.Substring(0, decimalstring.Length - 2)); 
string String2 = decimalstring.Substring(decimalstring.Length - 2, 2); 
string Result = String1 + "." + String2; 

謝謝你,

+0

如果這確實是一個大型機Cobol Zoned十進制數字格式,我認爲這必須是BizTalk的第一個! –

回答

3

數量看起來像一個大型機的Cobol劃十進制數(當然EBCDIC的Cobol其中也包括AS400的Cobol)。最後一位數字代表 數字符號和最後一位數字位數(即{= +0;} = -0; A = 1; J = -1; B = 2; k = -2等)。 {,A,B是EBCDIC格式的連續字符。

  • {A,B .. H分別表示正0..9
  • },J,K .. R 2表示負0..9

所以123B是1232和123K是-1232。

Biztalk幾乎肯定有代碼來決定這些數字。另外,它可以通過很多工具很容易地轉換成大型機上的正常數字(即排序,easytrieve等)。

如果您無法獲得文件翻譯,則可能需要獲取Cobol Copybook。

這裏是Java代碼decifer數(它不應該不應該是很難轉換爲C#):

private static int positiveDiff = 'A' - '1'; 
private static int negativeDiff = 'J' - '1'; 

public static String fromZoned(String numZoned) { 
    String ret; 
    String sign = ""; 
    char lastChar; 

    if (numZoned == null || numZoned.equals("") || numZoned.equals("-")) { 
     // throw ... 
     return ""; 
    } 

    ret = numZoned.trim(); 
    lastChar = ret.substring(ret.length() - 1).toUpperCase().charAt(0); 

    switch (lastChar) { 
     case '}' : sign = "-"; 
     case '{' : 
      lastChar = '0'; 
     break; 
     case 'A': 
     case 'B': 
     case 'C': 
     case 'D': 
     case 'E': 
     case 'F': 
     case 'G': 
     case 'H': 
     case 'I': 
      lastChar = (char) (lastChar - positiveDiff); 
     break; 
     case 'J': 
     case 'K': 
     case 'L': 
     case 'M': 
     case 'N': 
     case 'O': 
     case 'P': 
     case 'Q': 
     case 'R': 
      sign = "-"; 
      lastChar = (char) (lastChar - negativeDiff); 
     default: 
    } 
    ret = sign + ret.substring(0, ret.length() - 1) + lastChar; 

    return ret; 
} 

作爲一個側面說明格式來源於老凸模卡片。爲了節省空間,他們用符號過度輸入了最後一位數字;用一個減號(或者他們使用的任何東西)來加一個0會在EBCDIC等中產生一個}。

相關問題