import { DataFrame } from "./DataFrame.js";
import { DataLoader } from "./DataLoader.js";
/**
* A loader for csv data or files supporting different delimiters.
*
* Warning: does not support quotes.
*
* @author rkoppe <roland.koppe@awi.de>
*/
export class CsvLoader extends DataLoader {
content = null;
dataFrame = null;
constructor(content, separator = '\t') {
super();
this.content = content;
this.separator = separator;
}
/**
* Returns a list of available parameters, columns, data streams as Promise.
*
* @return {Promise<String[]>}
*/
async parameters() {
if (this.dataFrame == null) this.dataFrame = await this._read(this.content);
return Object.keys(that.dataFrame.columnMap);
}
/**
* Returns a DataFrame of the content as Promise.
*
* FIXME: support generic but compiled? filters, remove defined attributes
*
* @return {Promise<DataFrame>} Promise<DataFrame>
*/
async data() {
if (this.dataFrame == null) this.dataFrame = await this._read(this.content);
return this.dataFrame;
}
/**
* Reads the given string or File content and returns a Promise for listening
* to the resolve event.
*
* @param {string|File} content
*/
_read(content) {
let that = this;
// load from file
if (content instanceof File) {
return new Promise(function (resolve) {
let fr = new FileReader();
fr.onload = function (event) {
resolve(that._read(event.target.result));
}
fr.readAsText(content);
});
} else {
return new Promise(function (resolve) {
let df = new DataFrame();
df.read(content, that.separator);
resolve(df);
});
}
}
}