# Infos aus *.txt in Objektarrays



## Julius_ (11. Jun 2012)

Sehr geehrte Community,

ich arbeite derzeit an einem Atommassenrechner und benötige hierbei Hilfe. 
Funktionieren soll das ganze nach folgendem Prinzip: 
Chemie-Rechner: Umrechnung von Atommassen
Auf meinem Fenster soll es ein Eingabefeld (Nummernfeld) für die Elementnummer geben. 
Anhand von dieser Elementnummer (Ordnungszahl im Periodensystem der Elemente) soll das
Programm beim Drücken des Berechnen Buttons in zwei darunter liegende Felder den Elementnamen
und das Elementsymbol wiedergeben (sollte "1" eingegeben werden steht im Feld drunter also "Wasserstoff" und darunter wiederum "H"). Darunter kommt noch ein Nummernfeld, in das die Stoffmenge in mol eingegeben werden soll, die das Programm dann in Gramm umrechnet. 
Nun folgendes Problem: 
Jedes Element hat eine andere Atommasse zur Umrechnung. Man könnte das Ganze ja lösen, in dem man eine Textdatei einliest in der Elementname, Ordnungszahl, Elementsymbol und die Atommasse stehen. 
z.B. so:

1:Wasserstoff:H:1.0079
2:Helium:He:4.0026
3:Lithium:Li:6.941
4:Beryllium:Be:9.0122
5:Bor:B:10.811
6:Kohlenstoff:C:12.011
7:Stickstoff:N:14.007
8:Sauerstoff:O:15.999
9:Flour:F:18.998
10:Neon:Ne:20.18
11:Natrium:Na:22.99
12:Magnesium:Mg:24.305
13:Aluminium:Al:26.982
14:Silicium:Si:28.086
15hosphor:30.974
16:Schwefel:S:32.065
17:Chlor:Cl:35.453
18:Argon:Ar:39.948
19:Kalium:K:39.098
20:Calcium:Ca:40.078

Nun muss ich ja diese Daten per Java irgendwie zeilenweise einlesen und die Infos in Objektarrays speichern. Aber ich versteh ned ganz woran das Programm beim Einlesen jedes Mal erkennen soll, dass jede Info nach einem Doppelpunkt eine Neue ist... 
Ich hab von Arrays leider herzlich wenig Ahnung und wär für Hilfe deshalb sehr dankbar. Für ungenaue Formulierungen entschuldige ich mich Mal im Voraus

Liebe Grüße, 
Julius_


----------



## Gast2 (11. Jun 2012)

Das ist nen normales CSV Format. Jede Zeile ist ein Datensatz, die einzelnen Attribute sind per 
	
	
	
	





```
:
```
 getrennt. Entweder schnappst du dir einen CSV Parser, oder du splittest ganz simpel bei 
	
	
	
	





```
:
```
 (String#split).


----------



## turtle (11. Jun 2012)

Nehmen wir als Beispiel mal einen Text aus der Datei. (split splittet den Text in einzelne Teile die durch ":" getrennt sindund liefert die Einzelteile in einem Array zurück)

```
String s ="2:Helium:He:4.0026";
		String[] split = s.split(":");
		for (String teil : split) {
			System.out.println(teil);		
		}
```

Bleibt noch übrig eine Textdatei zeilenweise einzulesen ,-)


----------



## Network (11. Jun 2012)

Wenn du die Textdatei mit einem BufferedReader Zeile für Zeile einliest, kannst du den jeweiligen String der die Zeile repräsentiert in ein StringArray umwandeln per

```
String infos[] = zeile.split(":");
```


----------



## Julius_ (11. Jun 2012)

turtle hat gesagt.:


> Nehmen wir als Beispiel mal einen Text aus der Datei. (split splittet den Text in einzelne Teile die durch ":" getrennt sindund liefert die Einzelteile in einem Array zurück)
> 
> ```
> String s ="2:Helium:He:4.0026";
> ...



Über den BufferedReader liest Java doch zeilenweise ein, oder ?  Muss man halt zuerst Klassen und Interfaces aus java.io importieren, aber dann müssts ja klappen.


----------



## turtle (11. Jun 2012)

Vielleicht so?


```
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class A {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			File inFile = new File("dateiName.txt");
			BufferedReader reader = new BufferedReader(new FileReader(
					inFile));
			String line;
			List<String> lines = new ArrayList<>();
			while ((line = reader.readLine()) != null) {
				System.out.println(line);
				lines.add(line);
			}
			String[] array = lines.toArray(new String[0]);
			for (String s : array) {
				String[] split = s.split(":");
				for (String teil : split) {
					System.out.println(teil);
				}
				System.out.println("=================");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
```


----------



## Julius_ (20. Jun 2012)

Hallo, 

also, erstmal vielen Dank für die schnellen Antworten. Habs jetzt etwas anders gelöst, ebenfalls über ne while-Schleife, für die er die gesamte Textdatei zeilenweise durchlaufen soll. Da er immer alle Zeilen vom Text durchläuft ists zwar nicht die optimalste Lösung, aber bei dem Datensatz ("nur" 118 Zeilen) gerade noch zulässig. Sobald er eine Zeile eingelesen hat, splitet er die Infos nach dem Doppelpunkt und speichert sie in nem String Array ab. Eingelesen hab ich die benötigten Infos über den Index der jeweiligen Variable (1=Elementname, 2 = Elementsymbol ...). 

Danke trotzdem =)


----------

