2016-10-11 2 views
0

Hallo Ich versuche eine Atomsimulationsanwendung als mein Schulprojekt zu machen. Ich habe Arrays von jedem Element erstellt, die ich wie in Atomic Nummer speichern werde. Die Atomic Nummer wird in Symbol H gespeichert und so weiter. Ich habe die Datei mit Stream-Reader gelesen, aber ich habe Schwierigkeiten, jedes Element in das richtige Array zu lesen.Wie man eine Reihe von Linien einfügt und jedes Element in verschiedene Arrays einfügt

Txt-Datei ist hier

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(); 
     } 

    } 
} 
+1

Warum speichern Sie alle Werte in völlig separaten Arrays von 'TAtom' Objekten? Würde nicht jede "Aufzeichnung" ein einzelnes "TAtom" -Objekt repräsentieren? Was die Frage betrifft, was hast du versucht? Du machst nichts mit der Variable 'words'. – David

+0

Was ich versuche zu tun ist, einen Wert aus der Textdatei zu bekommen und dann in separate Arrays zu speichern, die dem entsprechen, nach dem ich suche.Zum Beispiel möchte ich alle meine Ordnungszahlen in Atomic Number, Symbol in Symbole und so weiter gespeichert werden. Diese Arrays können später zum Nachschlagen bestimmter Werte verwendet werden. Mein Lehrer hat empfohlen, struct zu verwenden, von dem ich keine Ahnung habe, dass ich ihn verwende. Ich weiß also nicht, was ich gerade mit diesem Code mache. –

+0

Dieser Ansatz macht keinen Sinn. Sie sollten wirklich eine einzelne TAtom-Instanz für jede Datenzeile erstellen. Betrachten Sie als eine Analogie, Speichern von Autos in einem Parkhaus. Normalerweise enthält jeder einzelne Raum ein einzelnes und komplettes Auto. Was Sie tun, ist ein Platz für alle Lenkräder, ein Platz für alle Reifen, ein Platz für alle Windschutzscheiben, etc. Und Sie zerlegen jedes Auto, wie es in die Garage kommt, legen Sie die Komponenten in die Räume, und dann planen Sie jedes Auto neu zu montieren, wie es die Garage verlässt. Während es "funktioniert", ist es ziemlich ineffizient und fehleranfällig. – David

Antwort

1

Diese Variable enthält die Daten von einer "Linie" (oder "record") in der Datei:

words = line.Split(','); 

Und ein solcher Datensatz sieht wie folgt aus:

1,H,Hydrogen,1,1+ 

Unter der Annahme, dass die Daten konsistent sind (Sie möchten eine Fehlerprüfung an verschiedenen Stellen hinzufügen, wenn dies nicht der Fall ist), dann können Sie eine Instanz von TAtom wie folgt erstellen:

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

Mögliche Laufzeitfehler enthalten, kann aber nicht beschränkt auf:

  • Ungültige int Daten in Ausnahmefällen würde von int.Parse(). Schauen Sie sich alternativ die Verwendung von int.TryParse() an. Es würde ein bisschen Umstrukturierung dieser einzelnen Codezeile in mehrere Zeilen erfordern, Eingaben getrennt lesen und die TAtom Instanz am Ende aufbauen.
  • Unvollständige "Datensätze" würden zu einer Ausnahme führen, wenn versucht wird, auf einen ungültigen Index unter words zuzugreifen. Sie können die Länge von words überprüfen, bevor Sie versuchen, es zu verwenden.

Es wäre in Ihrem Interesse, einen Blick darauf zu werfen, was Ihr Code in einem Debugger macht. Wenn Sie während der Ausführung durch jede Codezeile gehen, können Sie sehen, was sich in Ihren Variablen befindet. Die Untersuchung des Laufzeit-Inhalts von words ist Ihr größter Hinweis darauf, wie Sie Ihre TAtom Instanz aufbauen können.

Sobald Sie diese Instanz in der atom Variable oben haben, können Sie das zu jedem Array/Liste/Sammlung/etc hinzufügen. das du magst. (Siehe meine Kommentare zu der obigen Frage bezüglich Ihres Gesamtentwurfs.)

+0

Danke. Ich werde diese Idee aufgeben, da ich keine Ahnung mehr habe, was ich damit mache, aber danke für die Hilfe. –

-1

Ich würde die Daten zuerst lesen, wie Sie es tun. Da jede Zeile ein TAtom ist, weisen Sie den entsprechenden Indizes des durch Kommas getrennten Wortzeilenarrays ein neues TAtom zu und fügen Sie das Atom, das Sie für jede Zeile erstellen, zu einem Array oder einer Arraylist hinzu.

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(); 

Jetzt können Sie alle der Tatom structs durch die atomList zugreifen!

+0

Immer noch denken, das könnte funktionieren .. – Rice

Verwandte Themen