Infos aus *.txt in Objektarrays

Julius_

Mitglied
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
15:phosphor:p: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_
 
G

Gast2

Gast
Das ist nen normales CSV Format. Jede Zeile ist ein Datensatz, die einzelnen Attribute sind per
Code:
:
getrennt. Entweder schnappst du dir einen CSV Parser, oder du splittest ganz simpel bei
Code:
:
(String#split).
 

turtle

Top Contributor
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)
Java:
		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

Top Contributor
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
Java:
String infos[] = zeile.split(":");
 

Julius_

Mitglied
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)
Java:
		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 ,-)

Ü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

Top Contributor
Vielleicht so?

Java:
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_

Mitglied
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 =)
 

Neue Themen


Oben