Ich sitze gerade an einem Stück Code, und mich ärgert insbesondere die Kurzsichtigkeit der Ersteller der Daten ( namentlich IBM )
Die Datei einthält in der ersten Zeile die "Spaltenköpfe", und in den Zeilen 2 -n die Daten dazu.
Alles kein Problem, schon 100x gemacht. Nur leider wird IMHO ein ungeeigneter Delimiter verwendet. Einen Doppelpunkt zu verwenden, wenn die Daten auch Date/Time Werte enthalten können, das ist nicht sonderlich klug. Und es macht das Parsen solcher Daten nicht gerade einfacher.
Ich habe hier ein beispiel, wie die Header und Daten aussehen können ( Das Beispiel ist schon eine bereinigte Version der Rohdaten )
Was ich erreichen möchte ist eine Map aus den daten zu generieren, die als KEY den Header enthält und als WERT den korrespondierenden Eintrag im Datenstring.
package de.eknori.sandbox;
public class FileParser {
private static String HEADERS = "User:Device:SMS Address:Nonce:Time Created:Time Requested:Time Executed:Security Flags:Security Flags Failed:Failure Reason Code:Requester ID:Approval State:Approver ID:Approval Time";
private static String DATA1 = "CN=Kevin Kannix/OU=dau/O=dummstadt:FT88TDH7KP7V91GCH6R97MSLKO:null:2815699590:Tue Mar 07 09:13:02 CET 2017:Never:Never:none:none:0:null:Not required:null:Never";
private static String DATA0 = "CN=Kevin Kannix/OU=dau/O=dummstadt:FT88TDH7KP7V91GCH6R97MSLKO:null:2815699590:Never:Never:Never:none:none:0:null:Not required:null:Never";
public static void main(String[] args) {
try {
String[] headers = {};
headers = HEADERS.split(":");
String[] values = {};
values = DATA0.split(":");
int i = 0;
for (String header : headers) {
System.out.println(header.toUpperCase() + " = " + values[i]);
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sieht dann für DATA0 so aus ( ist keine Map, weiss ich )
USER = CN=Kevin Kannix/OU=dau/O=dummstadt
DEVICE = FT88TDH7KP7V91GCH6R97MSLKO
SMS ADDRESS = null
NONCE = 2815699590
TIME CREATED = Never
TIME REQUESTED = Never
TIME EXECUTED = Never
SECURITY FLAGS = none
SECURITY FLAGS FAILED = none
FAILURE REASON CODE = 0
REQUESTER ID = null
APPROVAL STATE = Not required
APPROVER ID = null
APPROVAL TIME = Never
Nimmt man DATA1 dann ist das Ergebnis natürlich völlig unsinnig.
USER = CN=Kevin Kannix/OU=dau/O=dummstadt
DEVICE = FT88TDH7KP7V91GCH6R97MSLKO
SMS ADDRESS = null
NONCE = 2815699590
TIME CREATED = Tue Mar 07 09
TIME REQUESTED = 13
TIME EXECUTED = 02 CET 2017
SECURITY FLAGS = Never
SECURITY FLAGS FAILED = Never
FAILURE REASON CODE = none
REQUESTER ID = none
APPROVAL STATE = 0
APPROVER ID = null
APPROVAL TIME = Not required
Was wäre euer Ansatz?
Bei den möglichen Date/Time Feldern steht immerhin ein TIME im header