Как разобрать данные, хранящиеся в массиве - PullRequest
0 голосов
/ 17 января 2019

У меня есть файл CSV, с которым я работаю. Я не хочу преобразовывать его в объект, чтобы иметь ключи и значения. Я хочу иметь возможность создавать больше массивов для хранения различных значений Температура жужжание часов SnowDepth и т. д. Все это будут массивы с 7 значениями

Прямо сейчас, вот как CSV хранится в массиве данных

  1. "28.11.2008 7: 30,1128, -2,122,86.2,34.06,1.178,320.2,20,4"
  2. "28.11.2008 7: 45,1129, -2,325,85,6,34,54,1,771,325,5,30,72"
  3. "28.11.2008 8: 00,1130, -2,679,85.7,30.73,1.764,312.1,28.98"
  4. "28.11.2008 8: 15,1131, -2,872,88,34,55,1,073,306,6,25,65"
  5. "28.11.2008 8: 30,1132, -2,953,90,7,35.25,1,247,311.2,30,06"
  6. "28.11.2008 8: 45,1133, -3,064,93,3,35,1.449,312.6,30,13"
  7. "28.11.2008 9: 00,1134, -2,771,91,5,33,44,0,988,311,28,27" длина: 7

1-е число - это отметка времени, 2-е - это номер записи, 3-е - это температура, 4-е - влажность и т. Д.

function get_Data(data) {
    "use strict";
    var fileData = new Array();
    data = data.split(/\r\n|\r|\n/);
    data = data.slice(Math.max(data.length - 7, 0));
    createGraph(data);
} 

Я хочу такие массивы

Tem = [-2,122, -2,325, -2,679, -2,872 ...]

часов = [7:30, 7:45, 8:00, 8:15 ...]

Ответы [ 3 ]

0 голосов
/ 17 января 2019

попробуйте это, оно должно работать. я знаю положение данных, чтобы их было легко разделить и найти сроки и дату

var csv = document.getElementById("csvFile").innerHTML ;



function get_Data(data) {
    var result = {terms:[], hours:[] }
    var r = data.split(/\r\n|\r|\n/);

    r.forEach(function(element) {
    if (element !== "" && element.length>1){
      var term = element.split(",")[2]
      var date = new Date(element.split(",")[0])
      var hour =  date.getHours() + ":" + (date.getMinutes()<=9 ? "0" + date.getMinutes() : date.getMinutes());
      
      result.terms.push(term);
      result.hours.push(hour)
      }
    });
 return result;
} 

console.log( get_Data(csv))
<div id="csvFile" style="display:none;">
11/28/2018 7:30,1128,-2.122,86.2,34.06,1.178,320.2,20.4
11/28/2018 7:45,1129,-2.325,85.6,34.54,1.771,325.5,30.72
11/28/2018 8:00,1130,-2.679,85.7,30.73,1.764,312.1,28.98
11/28/2018 8:15,1131,-2.872,88,34.55,1.073,306.6,25.65
11/28/2018 8:30,1132,-2.953,90.7,35.25,1.247,311.2,30.06
11/28/2018 8:45,1133,-3.064,93.3,35,1.449,312.6,30.13
11/28/2018 9:00,1134,-2.771,91.5,33.44,0.988,311,28.27
</div>
0 голосов
/ 17 января 2019

Вы смешиваете несколько вещей. Что fileData делает (кажется, не используется)? И slice не правильный способ сделать это.

Вместо этого попробуйте:

function get_Data(csv) {
    csv = csv.replace(/[\r\n]+/gi,"\n"); // reduce line endings into single LF chars
    rows = csv.split("\n"); // split into array of rows
    var result = [];
    for (var i in rows) result.push(rows[i].split(",")); // split each row
    return result;
}

(правка) Если вам нужны только последние X строк данных CSV, используйте:

function get_Data(csv,lastNumRows) { // get only the last <lastNumRows> rows
    csv = csv.replace(/[\r\n]+/gi,"\n"); // reduce line endings into single LF chars
    rows = csv.split("\n").slice(-lastNumRows); // split into array of rows
    var result = [];
    for (var i in rows) result.push(rows[i].split(",")); // split each row
    return result;
}
0 голосов
/ 17 января 2019

Простой - map и split для каждой запятой, затем посмотрите индекс, для которого это должно быть:

var data = ["11/28/2018 7:30,1128,-2.122,86.2,34.06,1.178,320.2,20.4",
  "11/28/2018 7:45,1129,-2.325,85.6,34.54,1.771,325.5,30.72",
  "11/28/2018 8:00,1130,-2.679,85.7,30.73,1.764,312.1,28.98",
  "11/28/2018 8:15,1131,-2.872,88,34.55,1.073,306.6,25.65",
  "11/28/2018 8:30,1132,-2.953,90.7,35.25,1.247,311.2,30.06",
  "11/28/2018 8:45,1133,-3.064,93.3,35,1.449,312.6,30.13",
  "11/28/2018 9:00,1134,-2.771,91.5,33.44,0.988,311,28.27",
];

var items = {
  date: [],
  recordNumber: [],
  temperature: [],
  humidity: [],
  value5: [],
  value6: [],
  value7: [],
  value8: [],
};

Object.keys(items).forEach((key, index) => items[key].push(data.map(str => str.split(",")[index])));

console.log(items);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...