Hej, jeg er ved at prøve at lave et 2-dimensionel array ud fra en csv-fil, men kan ikke "fange" linieskift, Jeg har prøvet alle løsninger som jeg kunne tænke mig til, men åbentbart ikke det rigtige. Jeg har følgende kode:
function loadDoc(url, cFunction) { var xhttp; xhttp=new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { cFunction(this); } }; xhttp.open("GET", url, true); xhttp.send(); } function myFunction(xhttp) { var str = ""; const chr = 013; let csvarray = []; var data = xhttp.responseText; data = data.replace(/"/gi,""); console.log(data.length); var x=0; var y = 0; for(i=0;i<=data.length;i++){ var c = data.substr(i,1); switch(c){ case ";": console.log(x,y);console.log(str); csvarray[x][y] = str; str = ""; y++; break; case "013"://Hvad skal der stå her for at "fange" et linieskift?? alert('Ny linie'); str=""; x=x+1; y=0;
1. linieskift i værdier adskiller sig fra 'næste post (x) linieskift' ved at være i gåseøjne - men de smides væk i 'data = data.replace(/"/gi,"");' 2. felt seperator tegnet ';' er ikke et sådant hvis det befinder sig indenfor et gåseøjne par - med andre ord - der skal tælles gåseøjne indefor hver linie - hvor linieskift er defineret som et postseperat lineskift hvis lige antal gåseøjne er passeret.
Den indeholder et genialt regular expression udtryk som jeg ikke vil kaste mig ud i at forklare, med det her der forholdes sig til om et lige eller ulige antal gåseøjne er passeret - det kendetegner en mænde af de snippets der kan opstøves: "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|"
... og måske om et gåseøje er et omsluttende eller feltindhold (to efter hinanden efter ulige antal - det også et konsept der idelt set skal tages vare på.
Hej, det gør ikke nogen forskel om " " er fjernet eller ej, og lave ; om til , kan man heller ikke fordi der decimaltal. Man kan fjerne og indsætte linieskift i filen der er på localhost og den der ligger på comp uden at det gør en forskel. Jeg må så konstatere at det ligger over mit niveau, men tak for indsatsen. VH Thomas V
Hej, efter en del youtube og W3schol er jeg nu kommet frem til dete:
function loadDoc(url, cFunction) { var xhttp; xhttp=new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { cFunction(this); } }; xhttp.open("GET", url, true); xhttp.send(); } function myFunction(xhttp) { var str = ""; var csvarray = [[]]; var data = xhttp.responseText; data = data.replace(/"/gi,""); console.log(data.length); var x=0; var y = 0; for(i=0;i<data.length;i++){ var c = data.substr(i,1); switch(c){ case ";": csvarray.push(str); console.log(x,y,str); str = ""; y++; c=""; break; case "\r": str=""; y=0; x++; c=""; break; default: str = str+c; c=""; } } document.getElementById("demo1").innerHTML = data; document.getElementById("demo2").innerHTML = csvarray; document.getElementById("demo3").innerHTML = csvarray[3][4]; } Forskellen på data og csvarray er at " ; "er blevet udskiftet med " , " . Console.log(x,y,str) viser et 2dim,array men jeg kan ikke med "demo3" trække data ud af array'et , er der nogen der hjælpe mig med at løse 'gåden'. På forhånd tak. Vh Thomas V
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.