解析结构化文本输入并组成嵌套类的结构化输出

本文关键字:结构化 嵌套 输出 文本 输入 | 更新日期: 2023-09-27 18:22:49

这是我从文本文件中读取的代码。它"工作"并从文本文件中读取,但有一个小错误。它返回的是:{Employee: Name: Name: red ID: 123 ID: Request: Name: Name: toilet ID: 444 Desc: water ID: Desc: }我知道它为什么这么做,我只是不知道如何修复它。columns[0]的值是"名称:红色''tID:123",columnms[1]的值是"名称:厕所''tID:444''tDesc:water"。

我知道它这么做是因为我在调用assignment.Employee.Name,但我不知道如何调用它才能在我的表单上显示它。我以为它会像assignment.Employee一样,但后来它给出了一个错误,即我无法将字符串转换为Employee类型。

Assignment是一个列表,其中包含来自其他列表(员工和服务请求)的2个对象。

public static List<Assignment> GetAssignment()
    {
        if (!Directory.Exists(dir))
            Directory.CreateDirectory(dir);

        StreamReader textIn =
            new StreamReader(
                new FileStream(path3, FileMode.OpenOrCreate, FileAccess.Read));
        List<Assignment> assignments = new List<Assignment>();
        while (textIn.Peek() != -1)
        {
            string row = textIn.ReadLine();
            string[] columns = row.Split('|');
            if (columns.Length >= 2)
            {
                Assignment assignment = new Assignment();
                assignment.Employee.Name = columns[0];
                assignment.Request.Name = columns[1];
                assignments.Add(assignment);
            }
        }
        textIn.Close();
        return assignments;
    }

编辑:我希望它只返回{Employee: Name: red ID: 123 Request: Name: toilet ID: 444 Desc: water}

解析结构化文本输入并组成嵌套类的结构化输出

很抱歉这不是一个答案,但由于这个网站上的奇怪规则,我不允许添加评论。请给我们一个名为"Assignment"的类或结构的定义,并告诉我们在代码运行后您希望它包含什么。

您在this.Employee上执行string.Format(),所以基本上它在Employee对象上执行默认的ToString(),它将列出所有字段及其关联值。你可能想这样称呼它:

return string.Format("Employee: {0} 't Request: {1}", this.Employee.Name, this.Request.Name);

或者,您可能想要覆盖EmployeeServiceRequest对象上的ToString(),以返回所需的结果。

更新

由于您编辑了问题以包含Employee对象,因此上述内容不相关。由于您的column[0]值实际上具有文本"Name: red 't ID: 123",因此在Employee覆盖ToString时,您不需要指定文本"Name:"

这个答案是基于这样的假设,即数据文件中的一个典型文本行如下所示:

名称:红色''tID:123|名称:厕所''tID:444''t描述:水

在我看来,这就像是在编码两个对象,第一个对象有两个属性(Name和ID),第二个对象有三个属性(名称、ID和描述)。

同一行中的对象由管道符号("|")分隔。同一对象内的属性由制表符("''t")分隔。每个属性由一个标识符("Name"、"ID")和一个值("red"、"123")组成,用冒号(":")分隔。这种对的自然数据结构将是CCD_ 20。

读取这样的文件会模仿嵌套。

  • 读一行;通过"|"将其拆分为字符串,每个字符串包含一个对象(您的列)
  • 将这些对象字符串中的每一个拆分''t,使每个生成的字符串包含一个键和一个值,它们之间有冒号(":")和空格
  • 用":"分割每个键值,以将键与值分隔开。修剪两者以去除多余的空白

雇员或其他此类对象持有一个字典来存储键/值对,ToString()只通过打印键、冒号和值来打印每一对。