Comparing version 0.0.1 to 0.0.2
{ | ||
"name": "dbf", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "generate dbf files", | ||
"main": "index.js", | ||
"dependencies": {}, | ||
"dependencies": { | ||
"jdataview": "~2.4.4" | ||
}, | ||
"devDependencies": { | ||
@@ -8,0 +10,0 @@ "expect.js": "~0.2.0", |
# dbf | ||
Create [DBF](http://en.wikipedia.org/wiki/DBASE) database files in pure | ||
JavaScript. | ||
based on https://code.google.com/p/js2shapefile/ but aiming for a full rewrite. | ||
DBF is a zombie file format kept alive by inclusion in the [Shapefile](http://en.wikipedia.org/wiki/Shapefile) | ||
file format. | ||
## usage | ||
@@ -14,20 +10,2 @@ | ||
### api | ||
`arraybuffer = dbf.writer(fields, data)` | ||
Fields as objects with | ||
* type: one of | ||
* C: String | ||
* L: Bool | ||
* D: Date | ||
* N, M, F, B: Number | ||
* name: column name | ||
And data is an array of objects that represent rows. | ||
Returns an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBuffer) | ||
of binary data. | ||
### example | ||
@@ -34,0 +12,0 @@ |
@@ -28,5 +28,3 @@ var fieldTypes = { | ||
attributes.forEach(writeAttribute); | ||
function writeAttribute(attr, i) { | ||
attributes.forEach(function(attr, i) { | ||
var fieldLength = fieldTypes[attr.type](attr); | ||
@@ -36,8 +34,7 @@ | ||
var i32 = i * 32; | ||
view.setInt8(i32 + 11, attr.type.charCodeAt(0)); | ||
view.setInt8(i32 + 16, fieldLength); | ||
view.setInt8(i * 32 + 11, attr.type.charCodeAt(0)); | ||
view.setInt8(i * 32 + 16, fieldLength); | ||
if (attr.type == 'N') { | ||
view.setInt8(i32 + 17, attr.scale || 0); | ||
view.setInt8(i * 32 + 17, attr.scale || 0); | ||
} | ||
@@ -47,5 +44,5 @@ | ||
bytesPerRecord += fieldLength; | ||
} | ||
}); | ||
// end of header | ||
// mark end of header | ||
view.setInt8(fieldDescLength - 1, 13); | ||
@@ -61,6 +58,10 @@ | ||
// var dbfHeaderBlob = new BlobBuilder(); | ||
// dbfHeaderBlob.append(dbfHeaderView.getBuffer()); | ||
// dbfHeaderBlob.append(view.getBuffer()); | ||
return { | ||
recordLength: bytesPerRecord, | ||
header: headerView, | ||
field: view | ||
header: headerBuffer, | ||
field: buffer | ||
}; | ||
@@ -67,0 +68,0 @@ }; |
@@ -5,3 +5,3 @@ var lib = require('./lib'); | ||
var dataLength = recordLength * rows.length + 1, | ||
var dataLength = (recordLength) * rows.length + 1, | ||
buffer = new ArrayBuffer(dataLength), | ||
@@ -11,8 +11,9 @@ view = new DataView(buffer), | ||
rows.forEach(writeRow); | ||
rows.forEach(function(row, num) { | ||
view.setUint8(offset, 32); | ||
offset += 1; | ||
offset = writeRow(row, offset, num); | ||
}); | ||
function writeRow(row) { | ||
view.setUint8(offset, 32); | ||
offset++; | ||
function writeRow(row, offset, num) { | ||
attributes.forEach(writeAttribute); | ||
@@ -23,3 +24,4 @@ | ||
fieldLength = attribute.length || 0, | ||
val = row[attribute.name] || rownum.toString(); | ||
val = row[attribute.name] || num.toString(), | ||
str; | ||
@@ -29,3 +31,3 @@ switch (dataType) { | ||
view.setUint8(offset, val ? 84 : 70); | ||
offset++; | ||
offset += 1; | ||
break; | ||
@@ -51,2 +53,4 @@ | ||
} | ||
return offset; | ||
} | ||
@@ -56,3 +60,3 @@ | ||
return view; | ||
return buffer; | ||
}; |
@@ -1,21 +0,32 @@ | ||
var record = require('./record'), | ||
var fs = require('fs'), | ||
record = require('./record'), | ||
header = require('./header'); | ||
module.exports = function write(fields, data) { | ||
var head = header(fields), | ||
row = record(fields, data, head.recordLength); | ||
return combine(combine(head.header, head.field), row); | ||
var headData = header(fields); | ||
var rowData = record(fields, data, headData.recordLength); | ||
return combined([ | ||
headData.header, | ||
headData.field, | ||
rowData | ||
]); | ||
}; | ||
function combine(a, b) { | ||
var c = new ArrayBuffer(a.byteLength + b.byteLength), | ||
d = new DataView(c); | ||
for (var i = 0; i < a.byteLength; i++) { | ||
d.setUint8(i, a.getUint8(i)); | ||
} | ||
for (; i < a.byteLength + b.byteLength; i++) { | ||
d.setUint8(i, b.getUint8(i - a.byteLength)); | ||
} | ||
return d; | ||
function combined(l) { | ||
var totalLength = l.reduce(function(mem, b) { | ||
return mem += b.byteLength; | ||
}, 0), | ||
buffer = new Buffer(totalLength), | ||
view = new Uint8Array(totalLength); | ||
var i = 0; | ||
l.forEach(function(_) { | ||
for (var j = 0; j < _.length; j++) { | ||
buffer[i] = _[i]; | ||
i++; | ||
} | ||
}); | ||
return buffer; | ||
} |
Sorry, the diff of this file is not supported yet
13
212
8405
1
28
+ Addedjdataview@~2.4.4
+ Addedjdataview@2.4.6(transitive)