aux-dbf
Version:
DBF for price PSM
86 lines (70 loc) • 2.15 kB
text/typescript
import { DBF_TABLE_TYPE } from "./DBF_TABLE_TYPE";
import { DBF_MODE } from "./DBF_MODE";
import { Column } from "./Column";
export abstract class DBFReader {
/** Тип таблицы */
protected TypeTable: DBF_TABLE_TYPE;
public mode: DBF_MODE;
/** год изменения файла */
protected DateHeaderY: number;
/** месяц изменения файла */
protected DateHeaderM: number;
/** день изменения файла */
protected DateHeaderD: number;
protected RecordsCount: number;
/** Полная длина заголовка включая дескриптор */
protected HeaderSize: number;
/** Длина одной записи */
protected RecordSize: number;
/** Наличие кодировки */
protected Encode: number | string;
/** Кол-во колонок */
protected ColumnCount: number;
protected columns: Column[];
public getColumns() {
return this.columns;
}
/**
* Данные в формате, 1 измерение массива row, 2 измерение column
*/
protected dataSource: [][];
public getDate() {
return (
this.DateHeaderY +
"-" +
this.DateHeaderM.toString().padStart(2, "0") +
"-" +
this.DateHeaderD.toString().padStart(2, "0")
);
}
public constructor(protected file: Buffer) {}
abstract readHeader(): void;
abstract readSignature(): void;
abstract readTable(): any[][];
printHeader() {
console.log(`
Type: ${this.TypeTable}
Date: ${this.getDate()}
Number of records: ${this.RecordsCount}
Header size: ${this.HeaderSize}
Record size: ${this.RecordSize}
Encode: ${this.Encode}
Number of columns: ${this.ColumnCount}
`);
}
printColumns() {
this.columns.forEach((element, index) => {
console.log(
`[${index
.toString()
.padStart(
2,
"0"
)}] ${element.getType()} ${element.getTitle()} ${element.getSize()},${element.getDecimalPlaces()}`
);
});
}
protected readChar(offset: number): string {
return String.fromCharCode(this.file.readInt8(offset));
}
}