代码之家  ›  专栏  ›  技术社区  ›  Caleb

如何从一个txt文件中生成一个水果数组,每个水果在C中有四个属性#

  •  -2
  • Caleb  · 技术社区  · 7 年前

    下面是文本文件示例:

    Apple, red, crunchy
    Orange, orange, juicy
    Watermelon, green, juicy
    

    好的,我可以让C#读每一行,然后把它放到一个数组中。我需要的是让C#看看它,制作并排列一个叫做“水果3”的东西。因此,对于数组中的第一项,我希望能够访问每个条目,而不是作为一个字符串访问所有条目。这样我就可以将每个属性发送到一个类中来生成对象。

    假设我已经创建了文件流之类的东西。

    Fruit[] fruits = new Fruit[3];
    

    现在我想把这三个条目放到第一行,并将其发送给构造器。

    任何帮助都将不胜感激,希望我足够清楚。

    3 回复  |  直到 7 年前
        1
  •  0
  •   Zakk Diaz    7 年前

    这个问题没有重点。你需要做几件事。

    然后使用System.IO.ReadLines(对此进行研究)获取文件的内容。 https://www.dotnetperls.com/file-readlines

    这将为您提供一个字符串数组,每个数组包含一个具有所有属性的水果项。

    遍历该数组,并使用string.Split(',')将该字符串解析为一个字符串数组,其中每个索引中都包含水果和属性。 https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.7.2

    一旦索引了属性,就可以遍历它并创建一个新的Fruit(){Name=string2dArray[i][0],Prop2=string2dArray[i][1],…} https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/how-to-initialize-objects-by-using-an-object-initializer

    你需要花时间来理解如何做这些步骤,我认为这里没有人可以(或者应该)为你做这些。

        2
  •  0
  •   Ashkan Mobayen Khiabani    7 年前

    您可以简单地使用Linq拆分项目:

    IEnumerable<string[]> items = File.ReadAllLines("filename.txt").Select(x=> x.Split(','));
    Fruit[] fruits = items.Select(x=> new Fruit{Name = x[0], Color = x[1], Type = x[2]}).ToArray();
    
        3
  •  0
  •   Technivorous    7 年前

    class Fruit
    {
        string fruitName { get; set; }
        string desc1 { get; set; }
        string desc2 { get; set; }
        string desc3 { get; set; }
        string desc4 { get; set; }
    
        public Fruit(string name,string description1,string description2)
        {
            this.fruitName = name;
            this.desc1 = description1;
            this.desc2 = description1;
        }
    
    
    }
    

    我想你应该朝着正确的方向走。尽管Zakk Diaz是正确的,但是您必须将文本逐行解析到这些水果对象中。然后将它们添加到数组中。如果可能的话我会用 List<Fruit> 而不是数组,但那只是我。

    它看起来是这样的:

    List<Fruit> fruits = new List<Fruit>();
    
            Fruit addfruit = new Fruit(firstLineOfParsed(name), secondLineOfParsed(desc1), thirdLineOfParsed(desc2));
            fruits.Add(addfruit);