tvilling53 Seniormester
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.
bvirk Professor
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-data

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:
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|"
bvirk Professor
05. marts 2021 - 13:55 #2
... 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å.
tvilling53 Seniormester
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
tvilling53 Seniormester
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
Ny bruger Nybegynder

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.

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB
Se flere it-job hos


Premium
NNIT-selskabet Scales efter nedlukning af svenske og norske selskaber: De store vækstmuligheder ligger i Danmark
Interview: I løbet af 2020 har det NNIT-ejede Scales lukket sine datterselskaber i Norge og Sverige. I stedet fokuserer ERP-selskabet udelukkende på Danmark de næste par år, forklarer, forklarer CEO Hasse Bergman. Se her, hvorfor selskabet har afviklet de to nordiske enheder.
Computerworld
Sundhed.dk er klar med vaccinepas: Sådan finder du det
Regeringen har sendt et digitalt coronapas i udbud, men allerede nu kan du få adgang til et digitalt vaccinepas, der dokumenterer din vaccinationsstatus.
CIO
Har du rost din mellemleder i dag? Snart er de uddøde - og det er et tab
Computerworld mener: Mellemledere lever livet farligt: Topledelsen får konstant ideer med skiftende hold i virkeligheden, og moden går mod flade agile organisationer. Men mellemlederen er en overset hverdagens helt med et kæmpe ansvar. Her er min hyldest til den ofte latterliggjorte mellemleder.
Job & Karriere
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
White paper
Sådan sikrer du hovednøglen til jeres data
80% af alle ransomwareangreb skyldes misbrug af privilegerede brugeradgange. Ved at begrænse og overvåge adfærden på de privilegerede konti samt kontrollere mængden af tildelte rettigheder kan du mindske skaden ved hackerangreb mod din virksomhed og i visse tilfælde helt blokere dem. Internt kan du bruge kontrollen med brugeradgange til at dokumentere, hvem der bevæger sig i hvilke systemer, og hvad der foregår derinde. Privilegeret brugerstyring har de seneste to år stået øverst på Gartners Top10-liste over it-sikkerhedsprojekter, der bør få højeste prioritet. Alligevel er teknologien kun så småt ved at finde fodfæste i Danmark. Det kan viden om åbenlyse gevinster, relativ kort implementeringstid og yderst rimeligt budget være med til at ændre på. I dette whitepaper folder vi temaet privilegeret brugerstyring ud og placerer teknologien i det væld af prioriteringer, som CISO’en hver dag skal foretage.