UNPKG

aux-dbf

Version:

DBF for price PSM

150 lines 7.05 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var DBFReader_1 = require("./DBFReader"); var DBF_MODE_1 = require("./DBF_MODE"); var LanguageDBF7_1 = require("./LanguageDBF7"); var Column_1 = require("./Column"); var iconv = require("iconv-lite"); var DBF7Reader = /** @class */ (function (_super) { __extends(DBF7Reader, _super); function DBF7Reader() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.sizeFieldDescriptior = 68; _this.sizeHeadLength = 48; return _this; } DBF7Reader.prototype.readHeader = function () { this.TypeTable = this.file.readInt8(0); this.DateHeaderY = this.file.readInt8(1) - 100 + 2000; this.DateHeaderM = this.file.readInt8(2); this.DateHeaderD = this.file.readInt8(3) % 31; this.RecordsCount = this.file.readInt32LE(4); this.HeaderSize = this.file.readInt16LE(8); this.RecordSize = this.file.readInt16LE(10); this.Encode = this.file .subarray(32, 63) .filter(function (r) { return r != 0; }) .toString(); // -1 - это байт окончания заголовка this.ColumnCount = (this.HeaderSize - this.sizeFieldDescriptior - 1) / this.sizeHeadLength; if (this.mode == DBF_MODE_1.DBF_MODE.TEST) { this.printHeader(); } }; DBF7Reader.prototype.readSignature = function () { var _this = this; this.columns = Array(this.ColumnCount) .fill(new Column_1.Column()) .map(function (_) { return new Column_1.Column(); }) .map(function (column, index) { var offset = index * _this.sizeHeadLength + _this.sizeFieldDescriptior; var name = _this.file .subarray(offset, offset + 31) .filter(function (r) { return r != 0; }) .toString(); var type = _this.readChar(offset + 32); var size = _this.file.readUInt8(offset + 33); var decimalPlaces = _this.file.readUInt8(offset + 34); var isMDX = _this.file.readUInt8(offset + 37).toString() != "0"; column.Add(name, size, type, index, decimalPlaces, isMDX); return column; }); if (this.mode == DBF_MODE_1.DBF_MODE.TEST) { this.printColumns(); } }; DBF7Reader.prototype.printHeader = function () { var _this = this; _super.prototype.printHeader.call(this); var lan = LanguageDBF7_1.LanguageDBF7.find(function (r) { return r.innerName == _this.Encode; }); if (!lan) return console.log("[X] Driver language is not Defined"); console.log("[*] Driver language: '" + this.Encode + "' " + lan.fullName + " | " + lan.voc); console.log(""); }; DBF7Reader.prototype.readTable = function () { var _this = this; console.time("READ DATA SOURCE"); var array = new Array(this.RecordsCount).fill(new Array(this.ColumnCount).fill(null)).map(function (r) { return new Array(_this.ColumnCount); }); var startPosition = this.HeaderSize; var offsetLeft = 0; for (var column = 0; column < this.ColumnCount; column++) { var position = startPosition + 1; if (this.columns[column].getType() == Column_1.COLUMN_TYPE.DOUBLE) { for (var row = 0; row < this.RecordsCount; row++) { array[row][column] = this.readIEEE754(this.file.subarray(position + offsetLeft, position + offsetLeft + 8)); position += this.RecordSize; } } else if (this.columns[column].getType() == Column_1.COLUMN_TYPE.CHARACTER) { var size = this.columns[column].getSize(); for (var row = 0; row < this.RecordsCount; row++) { // TODO array[row][column] = //iconv.decode( this.file.subarray(position + offsetLeft, position + offsetLeft + size); //, "win1251" //).trim(); // array[row][column] =this.file.subarray(position + offsetLeft, position + offsetLeft + size); position += this.RecordSize; } } else if (this.columns[column].getType() == Column_1.COLUMN_TYPE.INTEGER) { for (var row = 0; row < this.RecordsCount; row++) { array[row][column] = this.file.readUInt32BE(position + offsetLeft) & (~0x80000000); position += this.RecordSize; } } else if (this.columns[column].getType() == Column_1.COLUMN_TYPE.LOGICAL) { for (var row = 0; row < this.RecordsCount; row++) { var logicalValue = this.file.readUInt8(position + offsetLeft); array[row][column] = (logicalValue == 1 || logicalValue == 0x54 || logicalValue == 0x74 || logicalValue == 0x59 || logicalValue == 0x79); position += this.RecordSize; } } else if (this.columns[column].getType() == Column_1.COLUMN_TYPE.DATE) { for (var row = 0; row < this.RecordsCount; row++) { array[row][column] = this.readDate(this.file.subarray(position + offsetLeft, position + offsetLeft + 8)); var p = position + offsetLeft; position += this.RecordSize; } } else { throw new Error("[X] Непредсказуемый тип колонки"); } offsetLeft += this.columns[column].getSize(); } console.timeEnd("READ DATA SOURCE"); return array; }; DBF7Reader.prototype.readDate = function (buffer) { return buffer.toString("ascii", 0, 4) + "-" + buffer.toString("ascii", 4, 6) + "-" + buffer.toString("ascii", 6, 8); }; DBF7Reader.prototype.readIEEE754 = function (buffer) { return -buffer.readDoubleBE(0); }; DBF7Reader.prototype.t8 = function (position) { return this.file.readUInt8(position).toString(16).padStart(2, "0"); }; return DBF7Reader; }(DBFReader_1.DBFReader)); exports.DBF7Reader = DBF7Reader; //# sourceMappingURL=DBF7Reader.js.map