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]);
}