2013-11-24 107 views
0

在調試代碼時,Visual Studio爲我提供了一個「格式異常未處理」,同時突出顯示了這行代碼:'CustObj.d_CustDiscount = Convert.ToDecimal(gs_InPutBuffer.Substring(000,004)); 「格式異常在調試時未處理

我一直在谷歌正確的格式,並沒有拿出任何修復。所以我的主要問題是,如何重寫此代碼才能使其工作?

感謝您的幫助!

下面是完整的程序,如果你需要引用它:

try 
{ 
    CustObj.d_CustDiscount = Convert.ToDecimal(gs_InPutBuffer.Substring(0, 4)); 
} 
catch (FormatException e) 
{ 
    Console.WriteLine(gs_InPutBuffer.Substring(0, 4)); 
    Console.WriteLine(e.Message); 
} 

如果不是:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using CustFile_DLL; 

namespace FileConvertorPA03 
{ 
    class Program 
    { 
     //add these to handle I/O 
     //instatiate streamreader 
     private static StreamReader TextfileIn = new StreamReader("customers.txt"); 
     //instantiate the dll 
     private static CustFileClass CustObj = new CustFileClass(); 
     //a few vars 
     private static string gs_InPutBuffer = ""; 
     private static Int32 gi_TotalRec = 0, gi_FirstRecNo = 0; 
     private static bool gb_FirstRec = true; 
     static void Main(string[] args) 
     { 
      while ((gs_InPutBuffer = TextfileIn.ReadLine()) != null) 
      { 
       ParsetoAttributes(); 
       CustObj.AddObject(); 
      }//end while 
      PopMessageBox(); 
      TextfileIn.Close(); 
     }//end main 

     //method to parse input buffer to class attributes 
     private static void ParsetoAttributes() 
     { 
      CustObj.s_CustName = gs_InPutBuffer.Substring(000, 033).Trim(); 
      CustObj.s_CustAddress = gs_InPutBuffer.Substring(033, 032).Trim(); 
      CustObj.s_CustZip = gs_InPutBuffer.Substring(065, 005); 
      CustObj.s_CustPhone = gs_InPutBuffer.Substring(070, 010); 
      CustObj.d_CustDiscount = Convert.ToDecimal(gs_InPutBuffer.Substring(000, 004)); 
     }//end parse attributes 

     //method to count records added 
     static void CountRecs() 
     { 
      if (gb_FirstRec == true) 
      { 
       gi_FirstRecNo = CustObj.i_CustNumber; 
       gb_FirstRec = false; 
      }//end if 
      gi_TotalRec++; 
     }//end count recs 

     public static void PopMessageBox() 
     { 
      MessageBox.Show(String.Format("Message: \n\tRecords Added \t{0,6}n\tFirst Rec Added\t  {1,6}\n\tLast Rec Added\t{2,6}", 
      gi_TotalRec, gi_FirstRecNo, CustObj.i_CustNumber),"File Conversion Message:", 
      MessageBoxButtons.OK, MessageBoxIcon.Information); 

    }//end class 
    } 
}//end namespace 
+0

gs_InPutBuffer.Substring(000,004)在轉換時的值是多少? – aw04

+0

我該如何去檢查?我很抱歉,我對編碼很陌生。 – Rew

+0

我會在異常分配給變量之前添加一行,然後您可以在那裏設置斷點並在調試時停止您的代碼。這將允許您在調用子字符串(000,004)之後,在執行該行之後但在拋出異常之前將鼠標懸停在新值上後,查看該值。 – aw04

回答

0

有以下發現什麼問題是更換​​通話一個控制檯應用程序,您可以更改catch塊中的代碼以寫出MessageBox。您也可以在參數Substring的參數中省略前導零。

相關問題