05. marts 2021 - 11:41
Der er
4 kommentarer
Hvor dan "fanger" man et linie skift i csv-fil??
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;
break;
default:
str = str+c;
}
}
}
Herer csv-filen;
"12345678901";"12345678901";"";04-01-2021;"BS GF-FORSIKRING A/S";-6367,25; 3627,60;"";"";
"12345678901";"12345678901";"";04-01-2021;"BS FASANV�NGET";-800,00; 2827,60;"";"";
"12345678901";"12345678901";"";04-01-2021;"BS AL FINANS A/S";-735,00; 2092,60;"";"";
"12345678901";"12345678901";"";04-01-2021;"BS BOXER A/S";-448,75; 1643,85;"";"";
"12345678901";"12345678901";"";04-01-2021;"BS FAGLIGT F�LLES FORBUND";-92,50; 1551,35;"";"";
"12345678901";"";"12345678901";04-01-2021;"0349839"; 6250,00; 7801,35;"";"";
"12345678901";"12345678901";"";05-01-2021;"BS SYGEFORSIKRINGEN DANMARK";-380,00; 7421,35;"";"";
"12345678901";"12345678901";"";07-01-2021;"BS 341 E/F ";-2931,00; 4490,35;"";"";
"12345678901";"12345678901";"";08-01-2021;"BS KOMMUNE";-1080,45; 3409,90;"";"";
"12345678901";"12345678901";"0349839";29-01-2021;"0349839";-1500,00; 1909,90;"";"";
"12345678901";"12345678901";"";01-02-2021;"BS DR LICENS";-309,50; 1600,40;"";"";
"12345678901";"12345678901";"";01-02-2021;"BS AL FINANS A/S";-735,00; 865,40;"";"";
"12345678901";"12345678901";"";01-02-2021;"BS BOXER A/S";-448,75; 416,65;"";"";
"12345678901";"12345678901";"";01-02-2021;"BS FAGLIGT F�LLES FORBUND";-92,50; 324,15;"";"";
"12345678901";"12345678901";"";01-02-2021;"BS ENERGI A/S";-256,45; 67,70;"";"";
"12345678901";"";"12345678901";01-02-2021;"0349839"; 6250,00; 6317,70;"";"";
"12345678901";"12345678901";"";04-02-2021;"BS 341 E/F ";-2931,00; 3386,70;"";"";
Håber at der en der kan hjælpe. På forhånd tak.
VH Thomas V.
05. marts 2021 - 13:50
#1
konseptet du anvender fejler mht.
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.
Men det er heller ikke en triviel ting at lave rigtig, men med javascript med dets regular expression kan det lade sig gøre. Dette er en af de herlige snippets man kan finde:
https://stackoverflow.com/questions/1293147/example-javascript-code-to-parse-csv-dataDen 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:
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|"
05. marts 2021 - 17:06
#3
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
15. marts 2021 - 16:02
#4
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