C# 将文本文件读入对象

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样式、

经过几个小时的努力,我需要将文本文件读入对象我需要跳过文件中的前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用户名


感谢您的帮助

我在您的代码中发现了一些错误。我去把它扔了,解释一下我觉得奇怪的地方

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>