C# 从字符串数组读取int值的制表符分隔的txt文件

C# 从字符串数组读取int值的制表符分隔的txt文件,c#,int,arrays,textreader,C#,Int,Arrays,Textreader,我使用TextReader读取制表符分隔文件的每一行。 对于它读取的每一行,我在选项卡上拆分并填充一个字符串数组。 然后,我可以访问字符串数组中的特定位置以获取值 这对于以下字符串非常有效:userWorkload.SSN=arrColumns[0] 但是,当我尝试将其中一列转换为int时,在运行时收到一条错误消息:userWorkload.contactHours=convert.ToInt32(arrColumns[9]) 这是我的密码: List<UserWorkload> u

我使用TextReader读取制表符分隔文件的每一行。 对于它读取的每一行,我在选项卡上拆分并填充一个字符串数组。 然后,我可以访问字符串数组中的特定位置以获取值

这对于以下字符串非常有效:userWorkload.SSN=arrColumns[0]
但是,当我尝试将其中一列转换为int时,在运行时收到一条错误消息:userWorkload.contactHours=convert.ToInt32(arrColumns[9])

这是我的密码:

List<UserWorkload> userWorkloads = new List<UserWorkload>();
TextReader tr = File.OpenText("fall11-tab.txt");
string strLine = string.Empty;
string[] arrColumns = null;
while ((strLine = tr.ReadLine()) != null)
{
     UserWorkload userWorkload = new UserWorkload();

     arrColumns = strLine.Split('\t');
     userWorkload.SSN = arrColumns[0];
     userWorkload.contactHours = Convert.ToInt32(arrColumns[9]);     

     userWorkloads.Add(userWorkload);
 }
这是我的错误:
未处理的异常:System.FormatException:输入字符串的格式不正确。
在System.Number.StringToNumber(字符串str、NumberStyles选项、NumberBuffer&Number、NumberFormatInfo、布尔解析十进制)中
位于System.Number.ParseInt32(字符串s、NumberStyles样式、NumberFormatInfo信息)
在System.Convert.ToInt32(字符串值)
在C:\Users\baxter.NET\Documents\visualstudio 2010\Projects\User5Creator\User5Creator\InputFileReader.cs中的Snyder5Creator.InputFileReader.buildRowList()处:第31行
在C:\Users\baxter.NET\Documents\visualstudio 2010\Projects\User5Creator\Snyder5Creator\Program.cs中的Snyder5Creator.Main(字符串[]args)处:第24行

第31行是:userWorkload.contactHours=Convert.ToInt32(arrColumns[9])


在此方面的任何帮助都将不胜感激

一个或多个记录中可能有无效数据。如果可以忽略这些错误,可以使用int.TryParse:

 int parsedNumber;
 userWorkload.contactHours = int.TryParse(arrColumns[9], out parsedNumber) ? parsedNumber : -1;

把这个也包起来试试

List<UserWorkload> userWorkloads = new List<UserWorkload>();
TextReader tr = File.OpenText("fall11-tab.txt");
string strLine = string.Empty;
string[] arrColumns = null;
while ((strLine = tr.ReadLine()) != null)
{
     UserWorkload userWorkload = new UserWorkload();

     arrColumns = strLine.Split('\t');
     userWorkload.SSN = arrColumns[0];
     if(!int.TryParse(arrColumns[9], out userWorkload.contactHours)
     {
        //Throw something like InvalidArgumentException here or set to a safe value (-1?)
     }     

     userWorkloads.Add(userWorkload);
 }
List userWorkloads=new List();
TextReader tr=File.OpenText(“fall11 tab.txt”);
string strLine=string.Empty;
字符串[]arrColumns=null;
而((strLine=tr.ReadLine())!=null)
{
UserWorkload UserWorkload=新的UserWorkload();
arrColumns=strLine.Split('\t');
userWorkload.SSN=arrColumns[0];
如果(!int.TryParse(arrColumns[9],out userWorkload.contactHours)
{
//在此处抛出类似InvalidArgumentException的内容或设置为安全值(-1?)
}     
添加(userWorkload);
}

你也可以发布那个文本文件吗?显然,它在该元素处爆炸了,但我需要查看该元素以获得更多帮助。不过,我可能会使用TryParse(),作为一个开始。你是对的,它最终是隐藏在其中一行中的坏数据。感谢TryParse()提示,现在一切都正常了。
List<UserWorkload> userWorkloads = new List<UserWorkload>();
TextReader tr = File.OpenText("fall11-tab.txt");
string strLine = string.Empty;
string[] arrColumns = null;
while ((strLine = tr.ReadLine()) != null)
{
     UserWorkload userWorkload = new UserWorkload();

     arrColumns = strLine.Split('\t');
     userWorkload.SSN = arrColumns[0];
     if(!int.TryParse(arrColumns[9], out userWorkload.contactHours)
     {
        //Throw something like InvalidArgumentException here or set to a safe value (-1?)
     }     

     userWorkloads.Add(userWorkload);
 }