如何插入行和将每个元素插入到不同的数组中

时间:2016-10-11 19:01:03

标签: c# arrays

您好我正在尝试将原子模拟应用程序作为我的学校项目。我已经创建了每个元素的数组,我将存储在Atomic数字中,将存储符号H中存储的原子数等等。我已经使用流阅读器读取了该文件,但是我很难将每个元素读入正确的数组。

Txt文件在这里

1,H,Hydrogen,1,1+
3,Li,Lithium,7,1+
11,Na,Sodium,23,1+
19,K,Potassium,39,1+
37,Rb,Rubidium,85,1+
55,Cs,Casesium,133,1+
87,Fr,Francium,223,1+
4,Be,Beryllium,9,2+
12,Mg,Magnesium,24,2+
20,Ca,Calcium,40,2+
38,Sr,Strontium,88,2+
56,Ba,Barium,137,2+
88,Ra,Radium,226,2+
5,B,Boron,10,3+
13,Al,Aluminium,27,3+
31,Ga,Gallium,70,3+
49,In,Indium,115,3+
81,Tl,Thallium,204,3+
6,C,Carbon,12,0
14,Si,Silicon,28,0
32,Ge,Germanium,73,0
50,Sn,Tin,119,0
82,Pb,Lead,207,0
7,N,Nitrogen,14,3-
15,P,Phosphorus,31,3-
33,As,Arsenic,75,3-
51,Sb,Antimony,122,3-
83,Bi,Bismuth,209,3-
8,O,Oxygen,16,2-
16,S,Sulfur,32,2-
34,Se,Selenium,79,2-
52,Te,Tellurium,128,2-
84,Po,Polonium,209,2-
9,F,Fluorine,19,1-
17,Cl,Chlorine,35,1-
35,Br,Bromine,80,1-
53,I,Iodine,127,1-
85,At,Astatine,210,1-
2,He,Helium,4,0
10,Ne,Neon,20,0
18,Ar,Argon,40,0
36,Kr,Kryoton,85,0
54,Xe,Xenon,131,0
86,Rn,Radon,222,0

struct TAtom
{
    public int atomicNumber;
    public string symbol;
    public string name;
    public int mass;
    public string charge;
}

class Atom
{
    static void Main(string[] args)
    {
        {
            TAtom[] Atom = new TAtom[44];
            Atom[0].atomicNumber = 1;
            TAtom[] Symbol = new TAtom[44];
            Symbol[1].symbol = "";
            TAtom[] Name = new TAtom[44];
            Name[2].name = "";
            TAtom[] Mass = new TAtom[44];
            Mass[3].mass = '1';
            TAtom[] Charge = new TAtom[44];
            Charge[4].charge = "";

            string[] words;

            StreamReader File = new StreamReader(@"JUNK1.txt");
            while (File.EndOfStream == false)
            {
                string line = File.ReadLine();

                words = line.Split(',');
                 }

            File.Close();   
        }

    }
 }

2 个答案:

答案 0 :(得分:1)

此变量包含文件中“line”(或“record”)的数据:

words = line.Split(',');

这样的记录看起来像这样:

1,H,Hydrogen,1,1+

假设数据是一致的(如果不是,你想在各个地方添加错误检查),那么你可以像这样构建TAtom的实例:

var atom = new TAtom
{
    atomicNumber = int.Parse(words[0]),
    symbol = words[1],
    name = words[2],
    mass = int.Parse(words[3]),
    charge = words[4]
};

潜在的运行时错误包括但不限于:

  • 无效的int数据会导致int.Parse()发生异常。考虑使用int.TryParse()作为替代方案。这需要将这一行代码重构为多行,分别读取输入并在最后构建TAtom实例。
  • words上尝试访问无效索引时,不完整的“记录”会导致异常。在尝试使用之前,您可以检查words的长度。

查看代码在调试器中执行的操作符合您的最佳利益。当您在执行代码时逐步执行每行代码时,您可以看到变量中的内容。检查words的运行时内容是您构建TAtom实例的最大线索。

在上面的atom变量中有此实例后,您可以将其添加到任何数组/列表/集合/等。你喜欢。 (请参阅我对上述关于您的整体设计方法的问题的评论。)

答案 1 :(得分:-1)

我会先读取数据,就像你正在做的那样。由于每一行都是TAtom,因此将新的TAtom分配给逗号分隔的单词(line)数组的相应标记,然后将为每行创建的原子添加到数组或arraylist中。

$> curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash

现在,您可以通过List<TAtom> atomList = new List<TAtom>(); StreamReader File = new StreamReader(@"JUNK1.txt"); while (File.EndOfStream == false) { string line = File.ReadLine(); TAtom tatom = new TAtom(); words = line.Split(','); tatom.atomicNumber=words[0] tatom.symbol=words[1] tatom.name=words[2] tatom.mass=words[3] tatom.charge=words[4] //add the current line's atom to a data structure atomList.Add(tatom); } File.Close();

访问所有TAtom结构