JSFiddle - React, Tailwind, and code Playground
HTML
<input type="file" onchange="openfile(event)">
JavaScript
//VCA Reserved Characters Hexidecimal values un-escaped
var FS = '\u001C';
var GS = '\u001D';
var DC1 = '\u0011';
var DC3 = '\u0013';
var ACK = '\u0006';
var NAK = '\u0015';
var ESC = '\u001B';
var RS = '\u001E';
var SUB = '\u001A';
var CR = '\u000D';
var LF = '\u000A';
var field_seperator = '\u003B'; // hex for ";"
var label_seperator = '\u003D'; // hex for "="
var code_seperator = '\u002C'; // hex for ","
var mandatory_record_flag = '\u002A'; //hex for "*"
var unknown_data_indicator = '\u003F'; // hex for "?"
function VCArecords(stream) {
var records = {};
var temp = [];
var lines = stream.split(CR + LF);
for(var x in lines) {
temp = lines[x].split(label_seperator);
//every record set
if(records.hasOwnProperty(temp[0])) {
records[temp[0]] = records[temp[0]].concat(temp[1].split(field_seperator));
} else {
records[temp[0]] = temp[1].split(field_seperator);
}
}
records.RR = records.R.slice(0,records.TRCFMT[1]+1);
records.RL = records.R.slice(records.TRCFMT[6]*(-1));
if(records.hasOwnProperty("A")) {
records.AR = records.A.slice(0,records.TRCFMT[1]+1);
records.AL = records.A.slice(records.TRCFMT[6]*(-1));
}
if(records.hasOwnProperty("ZFMT")) {
records.ZR = records.Z.slice(0,records.ZFMT[1]+1);
records.ZL = records.Z.slice(records.ZFMT[6]*(-1));
}
if(records.hasOwnProperty("ZA")) {
records.ZAR = records.ZA.slice(0,records.ZFMT[1]+1);
records.ZAL = records.ZA.slice(records.ZFMT[6]*(-1));
}
return records;
}
function openfile(e) {
var input = e.target;
var reader = new FileReader();
reader.onload = function() {
var OMA = VCArecords(reader.result.trim());
alert(JSON.stringify(OMA));
};
reader.readAsText(input.files[0]);
}