2015-12-24 5 views
5

Ho un file contenenteLeggere un file di testo con JQuery e conservare in DataBase

1 : "Benz" 
2 : "Bmw" 
3 : "Porche" 
4 : "Ferrari" 

E vorrei leggerlo con Jquery e memorizzarli nel database locale in OpenDatabase, con 1 sarà un certo numero di passo e Benz sarà l'altro campo nel database.

mio codice per la lettura del file

jQuery.get('file/words.txt', function(data) { 
    alert(data) 
}); 

e il mio codice per la creazione di database

var db = openDatabase(’mydb’, ’1.0’, 
        ’database for test’, 
        2 * 1024 * 1024 
       ); 
db.transaction(function (tx) { 
tx.executeSql(’CREATE TABLE IF NOT EXISTS Car 
       (number INT, name VARCHAR(100))’); 

}); 

Non so come posso separare i dati e metterli in banca dati con javascript.

Grazie.

+0

Questo è davvero là fuori, ma si potrebbe provare a ricevere il file e usando '.split()' di javascript per renderlo un array? – Stardust

+0

Penso che dovrei usare match, ma non so come – joseva

risposta

1

Ecco il codice si fa ciò che si vuole:

// assume this is your data (I've added the newline as well) 
var textData = '1 : "Benz" \n2 : "Bmw" \n3 : "Porche"\n4 : "Ferrari" '; 

// turn data into array 
var ary = textData.split('\n').map(function(v) { 
    return v.split(':').map(function(v2) { 
     // make sure we remove the quotes and spaces 
     return v2.replace(/"/g, '').trim(); 
    }); 
}) 

// function to escape double quotes to prevent sql injection 
function escapeSql(str) { 
    return (typeof str === 'number' ? str : str.replace(/"/g, '"')); 
} 

// open database 
var db = openDatabase('mydb', '1.0', 'database for test', 2 * 1024 * 1024); 

// create table 
db.transaction(function(tx) { 
    tx.executeSql('create table if not exists Car(step, make)'); 
}); 

// insert data 
db.transaction(function(tx) { 
    // loop through each item and insert the data, notice how we call escapeSql to prevent sql injection 
    ary.forEach(function(item) { 
     var sql = 'insert into Car(step, make) values(' + escapeSql(item[0]) + ', "' + escapeSql(item[1]) + '")'; 
     tx.executeSql(sql); 
    }); 
}); 

var sql, 
    cars = []; 

// read data from table 
db.transaction(function(tx) { 
    tx.executeSql('select * from Car', [], function(tx, results) { 
     var len = results.rows.length; 
     for (var i = 0; i < len; i++) { 
      cars.push({ 
       step: results.rows.item(i).step, 
       make: results.rows.item(i).make 
      }); 
     } 

     console.log(cars); 
    }, null); 
}); 

uscita:

enter image description here

+0

Grazie per il tuo codice e appositamente per i commenti. Funziona. – joseva

1

Se possibile, elimina i numeri e le virgolette nel file di testo, non dovrebbero essere necessari (il tuo contatore lo farà per te).

modificare il codice per la lettura del file di testo a questo:

var file = "file/words.txt"; 
    function getFile(){ 
     $.get(file, function(txt){ 
      var lines = txt.responseText.split("\n"); 
      for (var i = 0, len = lines.length; i < len; i++) { 
       save(lines[i]); 
      } 
     }); 
    } 

Ora avete un array con ogni riga del file; se hai rimosso i numeri e le virgolette, dovrebbero essere solo i nomi delle auto.

for (var i = 0; i < lines.length; i++) { 
    tx.executeSql('INSERT INTO Car (id, name) VALUES (i, lines[i]); 
} 

Se si desidera mantenere il file come è, modificare la riga in basso come mostrato:

var lines = txt.responseText.split(":"); 

Ora l'array contiene il numero e il nome macchina (dispari è il numero, anche è il nome della macchina). potremmo voler sbarazzarsi di virgolette (SQL potrebbe gettare errore su quelli):

lines.replace(/"/g, '').trim(); 

for (var i = 0; i < lines.length; i++) { 
     tx.executeSql('INSERT INTO Car (id, name) VALUES (i, lines[i+1])'); 
     i++; // we iterate again because we want an odd number 
      // (we skip over one iteration as that'd be the car, and we want the next # instead). 
    } 
+0

sfortunatamente ho bisogno dei numeri e delle virgolette. in effetti il ​​file è lì e dovrei usarlo. i numeri indicano che il risultato del passaggio 1 sarà Benz e il risultato del passaggio 2 sarà Bmw – joseva

+0

@joseva Va bene, la modifica del codice è relativamente semplice. Basta cambiare .split ("\ n") in .split (":") poiché questo è il separatore in bianco e il nome della vettura. Aggiornerò la mia risposta con maggiori dettagli – Boris