【问题标题】:Tab delimited txt file reading int value from string array制表符分隔的 txt 文件从字符串数组中读取 int 值
【发布时间】:2012-05-14 19:38:50
【问题描述】:

我正在使用 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);
 }

UserWorkload 类只包含简单的 getter / setter:

class UserWorkload 
{
     public string SSN { get; set; }
     public int contactHours { get; set; }
}

这是我的错误:
未处理的异常:System.FormatException:输入字符串的格式不正确。
在 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
在 System.Number.ParseInt32(String s, NumberStyles 样式, NumberFormatInfo 信息)
在 System.Convert.ToInt32(字符串值)
在 C:\Users\baxter.NET\Documents\Visual Studio 2010\Projects\User5Creator\User5Creator\InputFileReader.cs: 31 行中的 Snyder5Creator.InputFileReader.buildRowList()
在 C:\Users\baxter.NET\Documents\Visual Studio 2010\Projects\User5Creator\Snyder5Creator\Program.cs: 24 行中的 Snyder5Creator.Program.Main(String[] args) 处

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

对此的任何帮助将不胜感激。

【问题讨论】:

  • 您也可以发布那个文本文件吗?显然它在那个元素上爆炸了,但我需要看到这个元素有更多帮助。不过,我可能会使用 TryParse() 作为开始。
  • 你是对的,它最终成为隐藏在其中一行中的坏数据。感谢 TryParse() 提示,现在一切正常。

标签: c# int arrays textreader


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    也将其包装在 try-catch 中。

    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);
     }
    

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多