Processing:Примеры/Загрузка и сохранение табличных данных

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску


Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Cat poo.png Черновик


Описание[1]

Этот скетч-пример демонстрирует, как использовать метод loadTable() для считывания данных из CSV-файла, а затем делать из этих данных графические объекты.

Сам CSV-файл выглядит следующим образом: x,y,diameter,name 160,103,43.19838,Happy 372,137,52.42526,Sad 273,235,61.14072,Joyous 121,179,44.758068,Melancholy

Пример

// массив объектов «Bubble»:
Bubble[] bubbles;
// объект Table (таблица):
Table table;

void setup() {
  size(640, 360);
  loadData();
}

void draw() {
  background(255);
  // показываем все пузыри:
  for (Bubble b : bubbles) {
    b.display();
    b.rollover(mouseX, mouseY);
  }

  textAlign(LEFT);
  fill(0);
  text("Click to add bubbles.", 10, height-10);
   //  "Кликните, чтобы нарисовать пузырь"
}

void loadData() {
  // загружаем CSV-файл в объект Table;
  // опциональный параметр "header" говорит,
  // что у файла есть ряд с заголовками:
  table = loadTable("data.csv", "header");

  // размер массива объектов «Bubble» определяется 
  // общим количеством рядов в CSV-файле:  
  bubbles = new Bubble[table.getRowCount()]; 

  // проходим через все ряды в таблице:
  int rowCount = 0;
  for (TableRow row : table.rows()) {
    // доступ к полям можно получить
    // при помощи названий столбцов (или индекса):
    float x = row.getFloat("x");
    float y = row.getFloat("y");
    float d = row.getFloat("diameter");
    String n = row.getString("name");
    // делаем объект «Bubble» на основе считанных данных:
    bubbles[rowCount] = new Bubble(x, y, d, n);
    rowCount++;
  }
}

void mousePressed() {
  // создаем новый ряд:
  TableRow row = table.addRow();
  // задаем значения из этого ряда: 
  row.setFloat("x", mouseX);
  row.setFloat("y", mouseY);
  row.setFloat("diameter", random(40, 80));
  row.setString("name", "Blah");

  // если в таблице более 10 рядов...
  if (table.getRowCount() > 10) {
    // ...удаляем самый старый ряд:
    table.removeRow(0);
  }

  // записываем эти данные обратно в тот же CSV-файл...
  saveTable(table, "data/data.csv");
  // ...и снова загружаем данные из него:
  loadData();
}




// класс «Bubble»

class Bubble {
  float x,y;
  float diameter;
  String name;
  
  boolean over = false;
  
  // создание объекта «Bubble»:
  Bubble(float x_, float y_, float diameter_, String s) {
    x = x_;
    y = y_;
    diameter = diameter_;
    name = s;
  }
  
  // проверяем, находится ли курсор над объектом «Bubble»:
  void rollover(float px, float py) {
    float d = dist(px,py,x,y);
    if (d < diameter/2) {
      over = true; 
    } else {
      over = false;
    }
  }
  
  // показываем пузырь:
  void display() {
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(x,y,diameter,diameter);
    if (over) {
      fill(0);
      textAlign(CENTER);
      text(name,x,y+diameter/2+20);
    }
  }
}

См.также

Внешние ссылки