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

本文关键字:数组 读取 int 字符串 分隔 txt 文件 制表符 | 更新日期: 2023-09-27 18:34:19

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

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

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

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

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

您可能在一条或多条记录中有无效数据。如果你可以忽略这些错误,你可以使用 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);
 }