]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/load/FileSplitter.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / tim / prune / load / FileSplitter.java
diff --git a/tim/prune/load/FileSplitter.java b/tim/prune/load/FileSplitter.java
deleted file mode 100644 (file)
index 60c2c5d..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-package tim.prune.load;
-
-/**
- * Class responsible for splitting the file contents into an array
- * based on the selected delimiter character
- */
-public class FileSplitter
-{
-       private FileCacher _cacher = null;
-       private int _numRows = 0;
-       private int _numColumns = 0;
-       private boolean[] _columnStates = null;
-       private String[] _firstFullRow = null;
-
-
-       /**
-        * Constructor
-        * @param inCacher FileCacher object holding file contents
-        */
-       public FileSplitter(FileCacher inCacher)
-       {
-               _cacher = inCacher;
-       }
-
-       /**
-        * Split the FileCacher's contents into a 2d array
-        * @param inDelim delimiter character
-        * @return 2d Object array
-        */
-       public String[][] splitFieldData(char inDelim)
-       {
-               _firstFullRow = null;
-               if (_cacher == null) return null;
-               String[] contents = _cacher.getContents();
-               if (contents == null || contents.length == 0) return null;
-               String delimStr = checkDelimiter(inDelim);
-               // Count non-blank rows and max field count
-               _numRows = 0;
-               int maxFields = 0;
-               for (int i=0; i<contents.length; i++)
-               {
-                       if (contents[i] != null && !contents[i].trim().equals(""))
-                       {
-                               _numRows++;
-                               String[] splitLine = contents[i].split(delimStr);
-                               if (splitLine != null && splitLine.length > maxFields)
-                               {
-                                       maxFields = splitLine.length;
-                                       _firstFullRow = splitLine;
-                               }
-                       }
-               }
-               _numColumns = maxFields;
-               _columnStates = new boolean[maxFields];
-
-               // Create array and populate it
-               // Note that array will be rectangular even if data is ragged
-               String[][] result = new String[_numRows][];
-               for (int i=0; i<contents.length; i++)
-               {
-                       result[i] = new String[maxFields];
-                       if (contents[i] != null)
-                       {
-                               String wholeLine = contents[i];
-                               if (!wholeLine.trim().equals(""))
-                               {
-                                       // Don't use trimmed string here because you'll lose empty fields at beginning
-                                       // if separated by spaces or tabs
-                                       String[] splitLine = wholeLine.split(delimStr);
-                                       if (splitLine != null)
-                                       {
-                                               System.arraycopy(splitLine, 0, result[i], 0, splitLine.length);
-                                               // Check if columns are blank or not
-                                               for (int j=0; j<splitLine.length; j++)
-                                               {
-                                                       if (!_columnStates[j] && splitLine[j].trim().length() > 0)
-                                                       {
-                                                               _columnStates[j] = true;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               return result;
-       }
-
-
-       /**
-        * @return the number of rows in the data
-        */
-       public int getNumRows()
-       {
-               return _numRows;
-       }
-
-
-       /**
-        * @return the number of columns in the data
-        */
-       public int getNumColumns()
-       {
-               return _numColumns;
-       }
-
-       /**
-        * @return the fields in the first full row
-        */
-       public String[] getFirstFullRow()
-       {
-               return _firstFullRow;
-       }
-
-
-       /**
-        * Check if the specified column of the data is blank
-        * @param inColumnNum number of column, starting with 0
-        * @return true if no data exists in this column
-        */
-       public boolean isColumnBlank(int inColumnNum)
-       {
-               // Should probably trap out of range values
-               return !_columnStates[inColumnNum];
-       }
-
-       /**
-        * Check the delimiter for proper regular expression matching
-        * @param inDelim character selected as delimiter
-        * @return regular expression for splitting
-        */
-       private static String checkDelimiter(char inDelim)
-       {
-               String result = "" + inDelim;
-               // Don't pass asterisks or dots without escaping them for RE
-               if (inDelim == '*' || inDelim == '.') {
-                       result = "\\" + result;
-               }
-               return result;
-       }
-}