Die Anforderungen in Ihrer Frage sind eher verwirrend und Dinge don‘ Es wird einfacher, wenn keine CSV-Beispieldaten vorhanden sind. Der verwirrende Teil bezieht sich auf die Daten der Spalten 1 und 2 hinsichtlich der Eindeutigkeit. Was halten Sie für EINZIGARTIG?
A) Ist es einzigartig in dem Sinne, dass Spalte 1 und oder Spalte 2 enthält einen String oder numerischen Wert zu sein, die nicht in einer anderen CSV-Datei Zeile dupliziert wird (kein Duplikat in seiner jeweiligen Spalte)?
B) Oder ist es, dass Spalte 1 und oder Spalte 2 in dem Sinne einzigartig zu sein, enthält eine Zeichenfolge oder einen numerischen Wert, der auf sich selbst einzigartig ist und innerhalb dessen in anderen CSV-Datei Leitungen (Duplikaten erlaubt gefunden werden entsprechende Spalte)?
Der folgende Beispielcode geht von einem eindeutigen Zustand aus (A).Das bedeutet dann, wenn eine CSV-Datei die folgenden Komma getrennte Linien enthalten sind dann nur zwei dieser Linien würden die angegebenen Daten Bedingungen erfüllen:
Jack,Flash,yes,14,Unknown Value
Bob,Stick,no,11,Unknown Value
Jack,Flash,no,22,Unknown Value
Fred,Frog,yes,6,Unknown Value
Bob,Stick,no,32,Unknown Value
Tracey,Jones,no,17,Unknown Value
Fred,Frog,no,23,Unknown Value
John,Brown,no,12,Unknown Value
Bob,Stick,yes,88,Unknown Value
da nur diese beiden Linien haben den Spalten 1 und 2, die auf die wirklich einzigartig sind gesamte CSV-Datei. Kannst du sehen, welche Linien sie sind? Hier
ist der Beispielcode:
ArrayList<String> resultList = new ArrayList<>();
ArrayList<String> linesList = new ArrayList<>();
// Input of file which needs to be parsed
String csvFile = "sample.csv";
BufferedReader csvReader;
// Data split by ',' in CSV file
String csvSplitBy = ",";
try {
// Read the CSV file into an ArrayList array for easy processing.
String line;
csvReader = new BufferedReader(new FileReader(csvFile));
while ((line = csvReader.readLine()) !=null) {
linesList.add(line);
}
csvReader.close();
}
catch (IOException e) { e.printStackTrace(); }
// Process each CSV file line which is now contained within
// the linesList list Array
for (int i = 0; i < linesList.size(); i++) {
String[] data = linesList.get(i).split(csvSplitBy);
String col1 = data[0];
String col2 = data[1];
String col3YesNo = data[2];
//int col4Value = Integer.parseInt(data[3]); //WAS THIS
double col4Value = Double.parseDouble(data[3]); // *** SHOULD BE ***
String col5Unknown = data[4];
// Determine if Column 1 and Column 2 data for the
// current line is unique to the entire CSV file.
boolean columns1And2AreUnique = true;
for (int j = 0; j < linesList.size(); j++) {
String[] tmp = linesList.get(j).split(csvSplitBy);
// Make sure we don't process the same line we are on...
if (j != i) {
if (col1.equals(tmp[0]) || col2.equals(tmp[1])) {
columns1And2AreUnique = false;
break;
}
}
}
if (columns1And2AreUnique && col3YesNo.equalsIgnoreCase("no") && col4Value >= 12.0) {
resultList.add(linesList.get(i));
}
}
// Display the determined results from the CSV file.
if (resultList.isEmpty()) {
System.out.println("There could be no data results gathered from the supplied\n"
+ "CSV file which meets the required criteria.");
}
else {
System.out.println("Column 1\tColumn 2\tColumn 3\tColumn 4\tColumn 5");
System.out.println("================================================"
+ "========================\n");
String padString = " "; //Used for simple space padding in display
for (int i = 0; i < resultList.size(); i++) {
String[] tmp = resultList.get(i).split(csvSplitBy);
System.out.println(tmp[0] + padString.substring(tmp[0].length()) + "\t"
+ tmp[1] + padString.substring(tmp[1].length()) + "\t"
+ tmp[2] + padString.substring(tmp[2].length()) + "\t"
+ tmp[3] + padString.substring(tmp[3].length()) + "\t"
+ tmp[4]);
}
}
EDIT: Nun, da Sie einige Beispieldaten aus der CSV-Datei geschrieben haben ...
Nun, ich war ganz in der Nähe mit meinem säulen CSV Datentyp-Annahmen, aber es muss eine Codeänderung sein, da ich weiß, dass die vierte Datenspalte Double Datentyp Werte enthält.
Sie müssen die Codezeile ändern, die besagt:
int col4Value = Integer.parseInt(data[3]);
dieser Codezeile, die den Datentyp Double Werte Griffe:
double col4Value = Double.parseDouble(data[3]);
Dies sollten Sie ein wenig helfen, während Sie sind Ändern des Codes nach Ihren Bedürfnissen.
Müssen die erste und die zweite Spalte zueinander oder zur 1. und 2. Spalte der gesamten CSV-Datei eindeutig sein? – DevilsHnd
@DevilsHnd Eindeutig für die gesamte CSV-Datei. Daher muss ich die richtige Zeile aus der CSV-Datei nur ausdrucken, wenn sie allen Anforderungen entspricht. –
In diesem Fall @Adil Khan, überprüfen Sie meine Antwort auf Ihre Frage. – DevilsHnd