Hallo zusammen,
ich bin auf der Suche nach einer möglichst eleganten (einfachen?) Möglichkeit die Variablen von SubListen der Reihe nach abzufragen und die Zahlenwerte (int/double) für eine Ausgabedatei (dat/txt) als String aufzubereiten. Die Oberliste hat "n" weitere Unterlisten, welche jeweils unterschiedlich viele Variablen besitzen können. Die Werte "null" sollten nicht ausgegeben werden und 0 nur bei speziellen Parametern. Die Variablentypen dieser ArrayList sind double, double[] und int bzw. int[]. Bei google & Co bin ich lach tagelanger Suche leider nicht fündig geworden, sodass ich auf eure Hilfe hoffe. :rtfm:
Meine Überlegung:
Sublisten jeweils einzeln ansprechen (geht das einfacher?) und hier mit einer for-Schleife oder dem Iterator (letzteres hat leider nicht funktioniert) die Variablen der Reihe nach abarbeiten, dabei:
1) Prüfen ob Wert "null" oder 0 ist
1a) Wenn ja: Muss Parameter mit ausgegeben werden? (diese Parameter sind nie Arrays!)
1aa) Wenn ja: Parameter als String konvertieren und für Ausgabe ablegen
1ab) Wenn nein: Überspringen
2) Zellinhalt ungleich null oder 0: Prüfen, ob Variable ein Array ist
2a) kein Array: siehe 1aa)
2b) ist Array: Dimension bestimmen und als String[] ablegen (ähnlich 1aa)
3) Parameter ausgeben
Zur Erklärung des Problems habe ich euch ein Minimalbeispiel erstellt - ich hoffe es hilft euch weiter.
Ich habe versucht mich möglichst kurz zu fassen und hoffe es sind keine wichtigen Informationen flöten gegangen. Sollte dem so sein, fragt bitte nach, ich helfe gerne.
Habt ihr vielleicht eine viel einfachere Lösung? Bereits jetzt ganz herzlichen Dank für eure Hilfe.
ich bin auf der Suche nach einer möglichst eleganten (einfachen?) Möglichkeit die Variablen von SubListen der Reihe nach abzufragen und die Zahlenwerte (int/double) für eine Ausgabedatei (dat/txt) als String aufzubereiten. Die Oberliste hat "n" weitere Unterlisten, welche jeweils unterschiedlich viele Variablen besitzen können. Die Werte "null" sollten nicht ausgegeben werden und 0 nur bei speziellen Parametern. Die Variablentypen dieser ArrayList sind double, double[] und int bzw. int[]. Bei google & Co bin ich lach tagelanger Suche leider nicht fündig geworden, sodass ich auf eure Hilfe hoffe. :rtfm:
Meine Überlegung:
Sublisten jeweils einzeln ansprechen (geht das einfacher?) und hier mit einer for-Schleife oder dem Iterator (letzteres hat leider nicht funktioniert) die Variablen der Reihe nach abarbeiten, dabei:
1) Prüfen ob Wert "null" oder 0 ist
1a) Wenn ja: Muss Parameter mit ausgegeben werden? (diese Parameter sind nie Arrays!)
1aa) Wenn ja: Parameter als String konvertieren und für Ausgabe ablegen
1ab) Wenn nein: Überspringen
2) Zellinhalt ungleich null oder 0: Prüfen, ob Variable ein Array ist
2a) kein Array: siehe 1aa)
2b) ist Array: Dimension bestimmen und als String[] ablegen (ähnlich 1aa)
3) Parameter ausgeben
Zur Erklärung des Problems habe ich euch ein Minimalbeispiel erstellt - ich hoffe es hilft euch weiter.
Java:
package listArrayToStringOut;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class StringOutput extends ArrayList {
public static void main(String[] args) {
int intZahl = 0;
double dZahl = 12.321;
double[] dArray = { 1.234, 5.678 };
int[] iArray = { 0, 4, 6 };
double dZahl2 = 98.765;
List<ExampleArray> exList = new ArrayList<ExampleArray>(0);
ExampleArray model = new ExampleArray();
model.setModelname("Testmodel");
exList.add(model);
ArrayList1 al1 = new ArrayList1();
al1.setIntZahl(intZahl);
al1.setdZahl(dZahl);
al1.setdArray(dArray);
model.addArrayList1(al1);
ArrayListN alN = new ArrayListN();
alN.setiArray(iArray);
alN.setdZahl2(dZahl2);
model.addArrayListN(alN);
System.out.println("Testmodel angelegt.");
StringOutput so = new StringOutput();
so.CreateOutput(exList);
}
public void CreateOutput(List<ExampleArray> exList) {
Field varAl1[] = ArrayList1.class.getDeclaredFields();
Field varAlN[] = ArrayListN.class.getDeclaredFields();
if (exList.size() == 1) {
for (ExampleArray exModel : exList) {
List<ArrayList1> al1s = exModel.getAL1();
if (al1s.size() == 1) {
for (ArrayList1 al1 : al1s) {
// Write general settings
System.out.println("$Beginn der Ausgabe");
System.out.println();
System.out.println();
for (int i = 0; i < varAl1.length; i++) {
String varName = varAl1[i].getName();
// Steps:
// 1) Check, if variable is Array. if true check its
// dimension
Object obj = al1.get(i);
if (obj instanceof Object[]) {
System.out.println("Ich bin ein Array!");
// 1a) Check the dimension of the array
// 1b) Check field type and convert all content
// of variable to String
} else {
// 2) Check field type and convert to String
}
// pure datatype
System.out.println(varName);
System.out.println();
// Case: 1d variable
// Case: 2d variable
// Case: 3d variable
}
System.out.println();
System.out.println("$END");
}
}
}
}
}
}
Java:
package listArrayToStringOut;
import java.util.ArrayList;
import java.util.List;
public class ExampleArray extends ArrayList {
private String paramName;
private String modelname;
private List<ArrayList1> al1 = new ArrayList<ArrayList1>(0);
private List<ArrayListN> alN = new ArrayList<ArrayListN>(0);
public void addArrayList1(ArrayList1 al) {
al1.add(al);
} // end addAllgemein
public void addArrayListN(ArrayListN al) {
alN.add(al);
} // end addDisturbance
public String getParamName() {
return paramName;
}
public void setParamName(String paramName) {
this.paramName = paramName;
}
public String getModelname() {
return modelname;
}
public void setModelname(String modelname) {
this.modelname = modelname;
}
public List<ArrayList1> getAL1() {
return al1;
}
public void setAL1(List<ArrayList1> al1) {
this.al1 = al1;
}
public List<ArrayListN> getALN() {
return alN;
}
public void setALN(List<ArrayListN> alN) {
this.alN = alN;
}
}
Java:
package listArrayToStringOut;
import java.util.ArrayList;
public class ArrayListN extends ArrayList {
private int[] iArray;
private double dZahl2;
public int[] getiArray() {
return iArray;
}
public void setiArray(int[] iArray) {
this.iArray = iArray;
}
public double getdZahl2() {
return dZahl2;
}
public void setdZahl2(double dZahl2) {
this.dZahl2 = dZahl2;
}
}
Java:
package listArrayToStringOut;
import java.util.ArrayList;
public class ArrayList1 extends ArrayList {
private int intZahl;
private double dZahl;
private double[] dArray;
public int getIntZahl() {
return intZahl;
}
public void setIntZahl(int intZahl) {
this.intZahl = intZahl;
}
public double getdZahl() {
return dZahl;
}
public void setdZahl(double dZahl) {
this.dZahl = dZahl;
}
public double[] getdArray() {
return dArray;
}
public void setdArray(double[] dArray) {
this.dArray = dArray;
}
}
Ich habe versucht mich möglichst kurz zu fassen und hoffe es sind keine wichtigen Informationen flöten gegangen. Sollte dem so sein, fragt bitte nach, ich helfe gerne.
Habt ihr vielleicht eine viel einfachere Lösung? Bereits jetzt ganz herzlichen Dank für eure Hilfe.