Hallo
ich stehe hier vor einem Problem wo ich nicht mehr weiter komme.
Ich will eine normalen Textdatei einlesen die so aussieht (Auschnitt):
So die drei Spalten will ich automatisch in drei verschidenen Listen speichern, jeweils als String, Integer und Double.
Meine Hauptklasse sieht so aus:
Um die Datei zu lesen hab ich mir eine Klasse geschrieben "AsciiFileReader", dass mir die einzelnen Spalten in verschiedenen Listen speichert.
Dazu muss ich nur bei der "read"-Funktion eine Formatangabe und die Listen übergeben.
Die Klasse sieht so aus:
Das einlesen funktioniert problemlos aber ich kann momentan die Daten nur als Object einlesen. Es soll aber eben anhand des Formatstrings automatisch das richtige Format gewählt werden.
Dies soll in der Funktion "getData" passieren.
Ich dachte dass es mit Object klappt aber wenn ich in der Hauptklasse die Listen mit String, Integer und Double definiere dann bekomme ich als Fehlermeldung
MIt Generics, oder zumindestens dass was ich ausprobiert hatte, funktionierts auch nicht, weil dann habe ich ja auch immer den selben "Generic-Typ".
Hat jemand ein Idee wie das Problem lösbar sein könnte.
Gruss
MIgu
ich stehe hier vor einem Problem wo ich nicht mehr weiter komme.
Ich will eine normalen Textdatei einlesen die so aussieht (Auschnitt):
Java:
1961012406 80 3.1
1961012407 60 3.1
1961012408 60 3.1
1961012409 80 3.1
1961012410 70 3.1
1961012411 70 4.1
1961012412 70 4.1
1961012413 80 2.6
So die drei Spalten will ich automatisch in drei verschidenen Listen speichern, jeweils als String, Integer und Double.
Meine Hauptklasse sieht so aus:
Java:
import java.io.FileNotFoundException;
import java.util.ArrayList;
public class ReadFile {
public static void main(String[] args) throws FileNotFoundException {
String file = "/home/migu/Desktop/input.txt";
ArrayList<Object> vec1 = new ArrayList<>();
ArrayList<Object> vec2 = new ArrayList<>();
ArrayList<Object> vec3 = new ArrayList<>();
AsciiFileReader a = new AsciiFileReader(file);
a.read("s,i,f", vec1,vec2,vec3);
}
}
Um die Datei zu lesen hab ich mir eine Klasse geschrieben "AsciiFileReader", dass mir die einzelnen Spalten in verschiedenen Listen speichert.
Dazu muss ich nur bei der "read"-Funktion eine Formatangabe und die Listen übergeben.
Die Klasse sieht so aus:
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class AsciiFileReader {
private String filename;
private File currentFile;
private String delimiter = " ";
private String format;
public AsciiFileReader() {
}
public AsciiFileReader(final String filename) {
this.filename = filename;
this.currentFile = new File(filename);
}
public AsciiFileReader(final File file) {
this.currentFile = file;
this.filename = file.getAbsolutePath();
}
public void read(final String format,ArrayList<Object>... args) throws FileNotFoundException {
this.format = format;
String[] splittedFormat = splitFormat(this.format);
Scanner scanner = new Scanner(this.currentFile);
scanner.useDelimiter(toRegularExpr(this.delimiter));
while (scanner.hasNext()) {
getData(scanner, splittedFormat, args);
}
}
public void setDelimiter(final String delimiter) {
this.delimiter = toRegularExpr(delimiter);
}
private void getData(Scanner scanner, final String[] splittedFormat, ArrayList<Object>... args) {
int i = 0;
for (ArrayList<Object> list : args) {
switch (splittedFormat[i]) {
case "s":
list.add(scanner.next());
break;
case "i":
list.add(scanner.next());
break;
case "f":
list.add(scanner.next());
break;
}
i++;
}
}
private String[] splitFormat(final String format) {
return format.split("\\,");
}
private String toRegularExpr(final String expr) {
String regExpr = "";
switch (expr) {
case " ":
regExpr = "\\s+";
break;
default:
regExpr = "\\" + expr;
}
return regExpr;
}
}
Das einlesen funktioniert problemlos aber ich kann momentan die Daten nur als Object einlesen. Es soll aber eben anhand des Formatstrings automatisch das richtige Format gewählt werden.
Dies soll in der Funktion "getData" passieren.
Ich dachte dass es mit Object klappt aber wenn ich in der Hauptklasse die Listen mit String, Integer und Double definiere dann bekomme ich als Fehlermeldung
Java:
Erroneous sym type
MIt Generics, oder zumindestens dass was ich ausprobiert hatte, funktionierts auch nicht, weil dann habe ich ja auch immer den selben "Generic-Typ".
Hat jemand ein Idee wie das Problem lösbar sein könnte.
Gruss
MIgu