diff --git a/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java b/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java index cd37a17b3..94a6e0943 100644 --- a/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java +++ b/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java @@ -11,6 +11,7 @@ import org.apache.commons.lang.NotImplementedException; import org.apache.commons.lang.StringUtils; import com.metaweb.gridworks.importers.parsers.CSVRowParser; +import com.metaweb.gridworks.importers.parsers.NonSplitRowParser; import com.metaweb.gridworks.importers.parsers.RowParser; import com.metaweb.gridworks.importers.parsers.SeparatorRowParser; import com.metaweb.gridworks.model.Project; @@ -18,6 +19,8 @@ import com.metaweb.gridworks.model.Row; public class TsvCsvImporter implements Importer { public void read(Reader reader, Project project, Properties options) throws Exception { + boolean splitIntoColumns = ImporterUtilities.getBooleanOption("split-into-columns", options, true); + String sep = options.getProperty("separator"); // auto-detect if not present int ignoreLines = ImporterUtilities.getIntegerOption("ignore", options, -1); int headerLines = ImporterUtilities.getIntegerOption("header-lines", options, 1); @@ -29,7 +32,8 @@ public class TsvCsvImporter implements Importer { List columnNames = new ArrayList(); LineNumberReader lnReader = new LineNumberReader(reader); - RowParser parser = (sep == null || (sep.length() == 0)) ? null : new SeparatorRowParser(sep); + RowParser parser = (sep != null && sep.length() > 0 && splitIntoColumns) ? + new SeparatorRowParser(sep) : null; String line = null; int rowsWithData = 0; @@ -43,13 +47,17 @@ public class TsvCsvImporter implements Importer { } if (parser == null) { - int tab = line.indexOf('\t'); - if (tab >= 0) { - sep = "\t"; - parser = new SeparatorRowParser(sep); + if (splitIntoColumns) { + int tab = line.indexOf('\t'); + if (tab >= 0) { + sep = "\t"; + parser = new SeparatorRowParser(sep); + } else { + sep = ","; + parser = new CSVRowParser(); + } } else { - sep = ","; - parser = new CSVRowParser(); + parser = new NonSplitRowParser(); } } diff --git a/src/main/java/com/metaweb/gridworks/importers/parsers/NonSplitRowParser.java b/src/main/java/com/metaweb/gridworks/importers/parsers/NonSplitRowParser.java new file mode 100644 index 000000000..f71e92c0b --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/importers/parsers/NonSplitRowParser.java @@ -0,0 +1,38 @@ +package com.metaweb.gridworks.importers.parsers; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import com.metaweb.gridworks.expr.ExpressionUtils; +import com.metaweb.gridworks.importers.ImporterUtilities; +import com.metaweb.gridworks.model.Cell; +import com.metaweb.gridworks.model.Row; + +public class NonSplitRowParser extends RowParser { + + public List split(String line) { + List results = new ArrayList(1); + + results.add(line.trim()); + + return results; + } + + public boolean parseRow(Row row, String line, boolean guessValueType) { + line = line.trim(); + if (line.isEmpty()) { + return false; + } else { + Serializable value = guessValueType ? ImporterUtilities.parseCellValue(line) : line; + if (ExpressionUtils.isNonBlankData(value)) { + row.cells.add(new Cell(value, null)); + return true; + } else { + row.cells.add(null); + return false; + } + } + } + +} diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index 9e326116a..0dc9d4dcc 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -1 +1 @@ - Freebase Gridworks

Freebase Gridworks

about

Upload a data file to create a new project.

Data File:
Project Name:
More options ...

Import an existing Gridworks project that has been exported as a .tar or .tar.gz file.

Project .tar or .tar.gz File:
Re-name Project: (optional)

Projects

\ No newline at end of file + Freebase Gridworks

Freebase Gridworks

about

Upload a data file to create a new project.

Data File:
Project Name:
More options ...

Import an existing Gridworks project that has been exported as a .tar or .tar.gz file.

Project .tar or .tar.gz File:
Re-name Project: (optional)

Projects

\ No newline at end of file diff --git a/src/main/webapp/scripts/dialogs/clustering-dialog.js b/src/main/webapp/scripts/dialogs/clustering-dialog.js index 009ed95b5..d43e492b3 100644 --- a/src/main/webapp/scripts/dialogs/clustering-dialog.js +++ b/src/main/webapp/scripts/dialogs/clustering-dialog.js @@ -33,7 +33,7 @@ ClusteringDialog.prototype._createDialog = function() { '' + 'Method: ' + '' + '' + @@ -77,7 +77,7 @@ ClusteringDialog.prototype._createDialog = function() { body.find(".knn-controls").hide(); self._method = "binning"; self._elmts.keyingFunctionSelector.change(); - } else if (selection === 'nearest neightbor') { + } else if (selection === 'nearest neighbor') { body.find(".binning-controls").hide(); body.find(".knn-controls").show(); self._method = "knn"; diff --git a/src/main/webapp/scripts/index.js b/src/main/webapp/scripts/index.js index e58c2da0c..6996adbb7 100644 --- a/src/main/webapp/scripts/index.js +++ b/src/main/webapp/scripts/index.js @@ -8,6 +8,7 @@ function onClickUploadFileButton(evt) { } else { $("#file-upload-form").attr("action", "/command/create-project-from-upload?" + [ + "split-into-columns=" + $("#split-into-columns-input")[0].checked, "separator=" + $("#separator-input")[0].value, "ignore=" + $("#ignore-input")[0].value, "header-lines=" + $("#header-lines-input")[0].value,