From b2549234e28af242cc6df2176045fc22031e49a5 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Wed, 28 Apr 2021 15:46:04 +0200 Subject: [PATCH] improved csv parsing --- main.js | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/main.js b/main.js index c745f02..d965e51 100644 --- a/main.js +++ b/main.js @@ -121,6 +121,46 @@ map.on("pointermove", e => { } }); +// this function should take a csv line and parse it to an array +function parseLine(line) { + out = []; + + while(line.length > 0) { + //line starts with , -> empty + if(line[0] === ',') { + //empty string + line = line.substr(1); + out.push(""); + continue; + } + + var end = line.length; + var start = 0; + var closing_len = 1; //length ofclosing string + // starts with " + if(line[0] === '"') { + start = 1; + + //find second " + end = line.indexOf('"', 1)-1; + closing_len = 3; //warum 3 ??? ich verstehs nich ich hätte 2 gedacht + } else { + //use next , as end + var newend = line.indexOf(','); + if(newend > 0) + end = newend; + } + + //getarg + out.push(line.substr(start, end)); + + //remove arg from line + line = line.substr(end+closing_len); + } + + return out; +} + function showError(error) { var span = document.createElement('p'); span.classList.add('error'); @@ -158,20 +198,26 @@ function addElement(elem, features) { } function loadedFile(text, filename) { - var lines = text.split("\n"); + //remove \r and split + var lines = text.replaceAll("\r", "").split("\n"); + var featuresLTE = []; var features = []; + + //check for IOS + if(lines[0] === "Date,ConnType,ConnDetails,Lat,Lon,Download,DownloadBytes,Upload,UploadBytes,Latency,ServerName,InternalIp,ExternalIp,Is SpeedTest VPN") { + showError("IOS files are not supported. Only Android for now."); + return; + } + for(var i = 1; i < lines.length; ++i) { var line = lines[i]; if(line.length < 10) continue; - var date = line.substr(1, 17); - line = line.substr(20); - var lineSplit = line.split(","); - lineSplit = [date ,... lineSplit]; + var lineSplit = parseLine(line); var elem = new Entry(lineSplit); - if(elem.conntype == "LTE") { + if(elem.conntype === "LTE") { addElement(elem, featuresLTE); } else { addElement(elem, features);