C# 将文本文件读入对象
经过几个小时的努力,我需要将文本文件读入对象我需要跳过文件中的前15行,但我不断遇到格式异常。请帮帮我。我还有很多东西要学 异常为=>System.FormatException:输入字符串的格式不正确。 位于System.Number.StringToNumber(字符串str、NumberStyles选项、NumberBuffer&Number、NumberFormatInfo信息、布尔解析十进制) 在System.Number.ParseInt32(字符串s、NumberStyles样式、NumberFormatInfo信息) 在System.Convert.ToInt32处(字符串值) 在D:\CleanTicket\PostTicketProject\PostTicketProject\PostTicketProject\Ticket.cs:第139行中的PostTicketProject.TicketHelper.LoadData(票证[]和票证,字符串[]文件行) 我的文件结构如下 pin开始日期时间=2019-03-14-01-45-05 pin结束日期时间=2019-03-15-02-47-05 ups star date skip=19 操作员名称=ups 。 . 星号=12 0[#]通过0 2019-03-15-02-47-05用户名 0[#]通过0 2019-03-15-02-47-05用户名 0[#]通过0 2019-03-15-02-47-05用户名 400000[#]缺少[@]图像1 2019-03-15-02-40-05用户名 8000偏移量图像1 2019-03-15-02-46-10用户名 0[#]通过0 2019-03-15-02-47-05用户名C# 将文本文件读入对象,c#,file,text,nullreferenceexception,formatexception,C#,File,Text,Nullreferenceexception,Formatexception,经过几个小时的努力,我需要将文本文件读入对象我需要跳过文件中的前15行,但我不断遇到格式异常。请帮帮我。我还有很多东西要学 异常为=>System.FormatException:输入字符串的格式不正确。 位于System.Number.StringToNumber(字符串str、NumberStyles选项、NumberBuffer&Number、NumberFormatInfo信息、布尔解析十进制) 在System.Number.ParseInt32(字符串s、NumberStyles样式、
感谢您的帮助我在您的代码中发现了一些错误。我去把它扔了,解释一下我觉得奇怪的地方
for(int i=0;i14)
{
我想你打算写if(I>14)
,因为现在你一到第15行就会陷入一个无休止的循环。作为if
的替代方法,你可以用14
初始化I
var data=fileLines[i]。替换(“,string.Empty)。替换(“\t”,string.Empty)。拆分(“”);
我猜您只是想删除行的开头和/或结尾处的空格和制表符。在这种情况下,您可以使用Trim()
/TrimStart()
/TrimEnd()
,但我可能弄错了,在这种情况下,您的替换是最好的解决方案
for(int j=0;j
在这个for循环中,您希望在data
中的分割字符串上循环,但您使用的是j
作为您的条件。这将针对行中的字符数量而不是拆分的子字符串数量运行for循环。为此,您需要像这样迭代data
数组:i
票[i][j]=新票
{
ErrCode=Convert.ToInt32(数据[j]),
缺陷名称=数据[j],
Action=Convert.ToInt32(数据[j]),
JudeTime=数据[j],
用户名=数据[j],
};
在这个段中,您正在创建票证
。问题是,首先您没有创建最有可能导致NullReferenceException
的内部数组,其次您总是使用相同的子字符串。在不太可能的情况下,ErrCode
,缺陷名称
,操作
,JudeTime
和UserName
都是所有数字,相同的是正确的,但这可能不是您想要的。解决方案是使用一维数组而不是二维数组,并且不迭代spit子字符串,而是使用数据
数组在那里创建对象
更新代码:
public void LoadData(参考票证[]票证,字符串[]文件行)
{
尝试
{
//读取并存储票证对象中的文本文件数据
票证=新票证[文件行.长度];
for(int i=14;i{0}”,FEx);
}
捕获(NullReferenceException NRefEx)
{
WriteLine(“异常为=>{0}”,NRefEx);
}
}
这假定行的格式为:
<ErrCode> <DefectName> <Action> <JudeTime> <UserName>
如果顺序不同,则需要将索引调整到数据数组中。formatexception意味着无法将字符串解析为int,因此'data[j]'在某些情况下可能是一个字母或空字符串。从何处获取nullreferences?异常总是有一个stacktrace,指向异常的原点内部,而循环将永远循环,因此这是问题的一部分。请将其删除,并使用for(int i=15;…)
。除此之外,我们还需要知道一个失败行的示例。请您提供一个文件内容的示例(跳过了15条第一条记录)?似乎您以错误的方式解析了它。“@Cheda:请您在问题中添加一个相关的(带有数据样本)文件摘录,好吗?
try
{
fileLines = File.ReadAllLines(@"D:\postTicket\repairTicket_post.txt");
}
catch (IOException IOEx)
{
Console.WriteLine("Failed to load file... Exception is => {0}", IOEx);
}
<ErrCode> <DefectName> <Action> <JudeTime> <UserName>