CSV Improvements

master
Harald Wolff 2018-02-22 19:05:48 +01:00
parent 8287e1f64a
commit aca1de8605
4 changed files with 56 additions and 23 deletions

View File

@ -18,7 +18,6 @@ import java.util.List;
import org.hwo.StringHelper; import org.hwo.StringHelper;
import org.hwo.text.LineReader; import org.hwo.text.LineReader;
@Deprecated
public class CSV { public class CSV {
List<CSVRecord> records; List<CSVRecord> records;

View File

@ -3,7 +3,6 @@ package org.hwo.csv;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@Deprecated
public class CSVRecord { public class CSVRecord {
ArrayList<Object> columns; ArrayList<Object> columns;

View File

@ -2,8 +2,10 @@ package org.hwo.csv;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Array;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Scanner; import java.util.Scanner;
@ -27,12 +29,44 @@ public class CSVTable {
} }
public Object[] getColumn(int column) { public Object[] getColumn(int column) {
return getColumn(column,0,this.rows.size());
}
public Object[] getColumn(int column,int start) {
return getColumn(column,start,this.rows.size());
}
public Object[] getColumn(int column,int start,int end) {
ArrayList<Object> ret = new ArrayList<>(); ArrayList<Object> ret = new ArrayList<>();
for(CSVTableRow r : this.rows) { for (int n = start; n < end; n++) {
ret.add(r.getValue(column)); ret.add(this.rows.get(n).getValue(column));
} }
return ret.toArray(); return ret.toArray();
} }
public <T> T[] getColumn(T[] targetType,int column) {
return getColumn(targetType, column, 0, this.rows.size());
}
public <T> T[] getColumn(T[] targetType,int column,int start) {
return getColumn(targetType, column, start, this.rows.size());
}
@SuppressWarnings("unchecked")
public <T> T[] getColumn(T[] targetType,int column,int start,int end) {
T[] targetArray = (T[])Array.newInstance(targetType.getClass().getComponentType(), end - start);
for (int n = start; n < end; n++) {
Object o = this.rows.get(n).getValue(column);
if (o != null) {
targetArray[n - start] = (T)o;
} else {
targetArray[n - start] = null;
}
}
return targetArray;
}
public int getColumnCount() { public int getColumnCount() {
int count = 0; int count = 0;
for(CSVTableRow r : this.rows) { for(CSVTableRow r : this.rows) {
@ -43,11 +77,11 @@ public class CSVTable {
} }
public String getCSV() { public String getCSV() {
String csv = new String(); StringBuilder csv = new StringBuilder();
for(CSVTableRow r : this.rows) { for(CSVTableRow r : this.rows) {
csv += r.getCSV(); csv.append(r.getCSV());
} }
return csv; return csv.toString();
} }
public static CSVTable ParseCSV(String path) { public static CSVTable ParseCSV(String path) {
@ -68,7 +102,9 @@ public class CSVTable {
CSVTableRow row = new CSVTableRow(); CSVTableRow row = new CSVTableRow();
String[] tokens = s.split(","); String[] tokens = s.split(",");
for(String t : tokens) { for(String t : tokens) {
if(t.contains("\"")) { if (t.equals("")) {
row.addValue(null);
} else if(t.contains("\"")) {
row.addValue(t.substring(1,t.length() - 1)); row.addValue(t.substring(1,t.length() - 1));
} }
else if(t.contains(".")) { else if(t.contains(".")) {

View File

@ -11,12 +11,14 @@ public class CSVTableRow {
public CSVTableRow() { public CSVTableRow() {
init(); init();
} }
public CSVTableRow(String title) { public CSVTableRow(String... values) {
init(); init();
addValue(title); for (String value : values) {
addValue(value);
}
} }
private void init() { private void init() {
this.values = new ArrayList<>(); this.values = new ArrayList<>();
@ -31,7 +33,7 @@ public class CSVTableRow {
public Object getValue(int column) { public Object getValue(int column) {
if(column >= this.values.size()) { if(column >= this.values.size()) {
return ""; return null;
} }
return this.values.get(column); return this.values.get(column);
} }
@ -66,29 +68,26 @@ public class CSVTableRow {
} }
public String getCSV() { public String getCSV() {
String ret = new String(); StringBuilder sb = new StringBuilder();
for(int i = 0; i < values.size(); i++) { for(int i = 0; i < values.size(); i++) {
Object obj = values.get(i); Object obj = values.get(i);
if(obj != null) { if(obj != null) {
if(obj.getClass() == String.class) { if(obj.getClass() == String.class) {
ret += formatString(obj.toString()); sb.append(String.format("\"%s\"",obj.toString()));
} }
else { else {
ret += obj.toString(); sb.append(obj.toString());
} }
} }
else { else {
ret += formatString("null");
} }
if(i < this.values.size() -1) if(i < this.values.size() -1)
ret += ","; sb.append(',');
} }
ret += "\n"; sb.append("\n");
return ret; return sb.toString();
} }
private String formatString(String str) {
return "\"" + str + "\"";
}
} }