Как экспортировать веб-SQL в файл .CSV - PullRequest
0 голосов
/ 07 февраля 2012

Я пишу приложение, которое будет работать в браузере webkit.Мне нужно, чтобы взять данные, локально хранящиеся на устройстве, и экспортировать их в формате .csv.Возможно ли это с помощью JavaScript?Это должно быть сделано в браузере.Php не вариант.Спасибо

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Вы можете сделать это, но вам нужно будет вручную сериализовать свой javascript в csv.Вам также необходимо решить, какой диалект CSV использовать.

Ниже приведена одна (непроверенная) возможность, показывающая общую схему, которую вы должны использовать.

function csvQuoteCell(cell, quotechar, sepchar) {
    // quote cells containing sepchar and double quote chars
    // this is an excel dialect
    var quoted = cell;
    if (cell.indexOf(sepchar)!==-1) {
        if (cell.indexOf(quotechar)!==-1 {
            quoted = quoted.replace(quotechar, quotechar+quotechar);
        }
        quoted = quotechar+quoted+quotechar;
    }
    return quoted;
}
function array2csv(ar, quotechar, sepchar) {
    var quoted = [];
    for (var i=0;i<ar.length;i++) {
        quoted.push(csvQuoteCell(ar[i], quotechar, sepchar);
    }
    return quoted.join(sepchar);
}

var db = openDatabase('mydb','1.0','thedatabase',1024*1024);
db.readTransaction(function(tx){
    tx.executeSql('SELECT col1, col2, col3 FROM thetable', [], function(tx, results){
        var quotechar = '"';
        var sepchar = ',';
        var row, rowarray, csvstring;
        var csvs = [];
        var fieldnames = ['col1','col2','col3'];
        // this is the header row
        csvs.append(array2csv(fieldnames, quotechar, sepchar));
        for (var i=0; i<results.rows.length; i++) {
            row = results.rows.item(i);
            // you need to make sure you have an explicit order for the csv
            // row is an object with unordered keys!
            rowarray = [];
            for (var j=0;j<fieldnames.length;j++) {
                rowarray.push(row[fieldnames[j]]);
            }
            csvs.push(array2csv(rowarray, quotechar, sepchar));
        }
        csvstring = csvs.join('\r\n');
        // csvstring should now contain a multirow csv string
    });
});

Однако, вероятно, невозможно«загрузить» этот файл из JavaScript в локальную файловую систему, только чтобы загрузить его на сервер.В зависимости от конкретной среды браузера вы можете использовать очень черновой FileWriter api , какой-нибудь флэш-файл или java-апплет, или, возможно, какой-то проприетарный API, предлагаемый вашим устройством.

0 голосов
/ 07 февраля 2012

Предполагая, что файл sqlite находится на сервере (мы не говорим о локальном хранилище, верно?), Вам все равно потребуется доступ к файлу на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...