From aca1de8605963201c9e8e4d849abfb56a83bcc96 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Thu, 22 Feb 2018 19:05:48 +0100 Subject: [PATCH] CSV Improvements --- src/org/hwo/csv/CSV.java | 1 - src/org/hwo/csv/CSVRecord.java | 1 - src/org/hwo/csv/CSVTable.java | 48 ++++++++++++++++++++++++++++---- src/org/hwo/csv/CSVTableRow.java | 29 ++++++++++--------- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/src/org/hwo/csv/CSV.java b/src/org/hwo/csv/CSV.java index 433cd11..75040c7 100644 --- a/src/org/hwo/csv/CSV.java +++ b/src/org/hwo/csv/CSV.java @@ -18,7 +18,6 @@ import java.util.List; import org.hwo.StringHelper; import org.hwo.text.LineReader; -@Deprecated public class CSV { List records; diff --git a/src/org/hwo/csv/CSVRecord.java b/src/org/hwo/csv/CSVRecord.java index 117c9a4..d6c41d6 100644 --- a/src/org/hwo/csv/CSVRecord.java +++ b/src/org/hwo/csv/CSVRecord.java @@ -3,7 +3,6 @@ package org.hwo.csv; import java.util.ArrayList; import java.util.Arrays; -@Deprecated public class CSVRecord { ArrayList columns; diff --git a/src/org/hwo/csv/CSVTable.java b/src/org/hwo/csv/CSVTable.java index c716f4a..a486748 100644 --- a/src/org/hwo/csv/CSVTable.java +++ b/src/org/hwo/csv/CSVTable.java @@ -2,8 +2,10 @@ package org.hwo.csv; import java.io.File; import java.io.IOException; +import java.lang.reflect.Array; import java.nio.file.Files; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Scanner; @@ -27,12 +29,44 @@ public class CSVTable { } 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 ret = new ArrayList<>(); - for(CSVTableRow r : this.rows) { - ret.add(r.getValue(column)); + for (int n = start; n < end; n++) { + ret.add(this.rows.get(n).getValue(column)); } return ret.toArray(); } + + public T[] getColumn(T[] targetType,int column) { + return getColumn(targetType, column, 0, this.rows.size()); + } + + public T[] getColumn(T[] targetType,int column,int start) { + return getColumn(targetType, column, start, this.rows.size()); + } + + @SuppressWarnings("unchecked") + public 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() { int count = 0; for(CSVTableRow r : this.rows) { @@ -43,11 +77,11 @@ public class CSVTable { } public String getCSV() { - String csv = new String(); + StringBuilder csv = new StringBuilder(); for(CSVTableRow r : this.rows) { - csv += r.getCSV(); + csv.append(r.getCSV()); } - return csv; + return csv.toString(); } public static CSVTable ParseCSV(String path) { @@ -68,7 +102,9 @@ public class CSVTable { CSVTableRow row = new CSVTableRow(); String[] tokens = s.split(","); 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)); } else if(t.contains(".")) { diff --git a/src/org/hwo/csv/CSVTableRow.java b/src/org/hwo/csv/CSVTableRow.java index 2a3b302..d99e844 100644 --- a/src/org/hwo/csv/CSVTableRow.java +++ b/src/org/hwo/csv/CSVTableRow.java @@ -11,12 +11,14 @@ public class CSVTableRow { public CSVTableRow() { init(); } - - public CSVTableRow(String title) { + + public CSVTableRow(String... values) { init(); - addValue(title); + for (String value : values) { + addValue(value); + } } - + private void init() { this.values = new ArrayList<>(); @@ -31,7 +33,7 @@ public class CSVTableRow { public Object getValue(int column) { if(column >= this.values.size()) { - return ""; + return null; } return this.values.get(column); } @@ -66,29 +68,26 @@ public class CSVTableRow { } public String getCSV() { - String ret = new String(); + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < values.size(); i++) { Object obj = values.get(i); if(obj != null) { if(obj.getClass() == String.class) { - ret += formatString(obj.toString()); + sb.append(String.format("\"%s\"",obj.toString())); } else { - ret += obj.toString(); + sb.append(obj.toString()); } } else { - ret += formatString("null"); } if(i < this.values.size() -1) - ret += ","; + sb.append(','); } - ret += "\n"; - return ret; + sb.append("\n"); + return sb.toString(); } - private String formatString(String str) { - return "\"" + str + "\""; - } }