2013-11-24 35 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的参数中省略前导零。

相关问题