• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Funktion - Daten als Eigenschaft abgreifen

anthoferd

Neues Mitglied
Ich möchte eine CSV auslesen, die einzelnen Zeilen splitten und die daraus resultierenden Daten weiterverwenden.

Hier mein erster Ansatz:
Code:
function read_csv(filename) {
    $.ajax({
        type: "GET",
        async: false,
        url: filename,
        data: "getid=true",
        success: function(data){
            daten=data;
        },
        error: function(){
            daten=null;
        }
    });
    return daten;
}

function split_csv(daten){
    var series = [];
    var cats = [];
    // Split lines
    var lines = daten.toString().split('\n');
    // For each line, split the record into seperate attributes
    $.each(lines, function(lineNo, line) {
        var items = line.split(',');
            // first line contains the series names
            if (lineNo === 0) {
                for (var i = 1; i < items.length; i++) {
                    series.push({
                        name: items[i],
                        data: []
                    });
                }             
            } else {
                for (var i = 1; i < items.length; i++) {
                    // get the serie
                    var serie = series[i - 1];                 
                    serie.data.push(                                       
                    parseFloat(items[i]));
                }
                //cats.push(Highcharts.dateFormat('%e',parseFloat(items[0]*1000)));
            }
    });
    this.series = series;
    this.cats = cats;
}

function get_csv(filename) {
    daten = read_csv(filename);
    split = new split_csv(daten);
    console.log(split.series);
}

Wie schaffe ich es nun, dass ich die beiden Zeilen "this.series = series;" und "this.cats = cats;" nicht benötige und trotzdem auf die Eigenschaft zugreifen kann. Wenn ich anstatt

Code:
var series = [];


Code:
this.series = [];

verwende, funktioniert das mit dem series.push nicht.
Oder gibt es für mein Vorhaben ein schönere Variante?

Danke schon mal!
 
Woher nimmst du das this her?
Dein Problem ist viel elementarer. Split CSV ist keine Klasse sondern nur eine Funktion, Funktionen kann man nicht instantiieren und du bist im falschen Kontext für this. Außerdem gibst du keine Daten zurück.
Sofern deine series und cats arrays auch richtig befüllt werden versuche folgendes zurückzugeben.

Code:
var result = {s: series, c: cats}
return result;

Anschließend kannst du via split.s und split.c auf deine Daten zugreifen. Das new muss vor dem split_csv() natürlich noch weg
 
Wenn du dich in der OOP fit fühlst ist das keine schlechte Idee.
Ein CSV Parser wäre eine Nette Klasse.

Momentan hast du so nen Mischmasch.
 
Zurück
Oben