Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

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

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


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.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

Пример

  1. // массив объектов «Bubble»:
  2. Bubble[] bubbles;
  3. // объект Table (таблица):
  4. Table table;
  5.  
  6. void setup() {
  7.   size(640, 360);
  8.   loadData();
  9. }
  10.  
  11. void draw() {
  12.   background(255);
  13.   // показываем все пузыри:
  14.   for (Bubble b : bubbles) {
  15.     b.display();
  16.     b.rollover(mouseX, mouseY);
  17.   }
  18.  
  19.   textAlign(LEFT);
  20.   fill(0);
  21.   text("Click to add bubbles.", 10, height-10);
  22.    //  "Кликните, чтобы нарисовать пузырь"
  23. }
  24.  
  25. void loadData() {
  26.   // загружаем CSV-файл в объект Table;
  27.   // опциональный параметр "header" говорит,
  28.   // что у файла есть ряд с заголовками:
  29.   table = loadTable("data.csv", "header");
  30.  
  31.   // размер массива объектов «Bubble» определяется
  32.   // общим количеством рядов в CSV-файле:  
  33.   bubbles = new Bubble[table.getRowCount()];
  34.  
  35.   // проходим через все ряды в таблице:
  36.   int rowCount = 0;
  37.   for (TableRow row : table.rows()) {
  38.     // доступ к полям можно получить
  39.     // при помощи названий столбцов (или индекса):
  40.     float x = row.getFloat("x");
  41.     float y = row.getFloat("y");
  42.     float d = row.getFloat("diameter");
  43.     String n = row.getString("name");
  44.     // делаем объект «Bubble» на основе считанных данных:
  45.     bubbles[rowCount] = new Bubble(x, y, d, n);
  46.     rowCount++;
  47.   }
  48. }
  49.  
  50. void mousePressed() {
  51.   // создаем новый ряд:
  52.   TableRow row = table.addRow();
  53.   // задаем значения из этого ряда:
  54.   row.setFloat("x", mouseX);
  55.   row.setFloat("y", mouseY);
  56.   row.setFloat("diameter", random(40, 80));
  57.   row.setString("name", "Blah");
  58.  
  59.   // если в таблице более 10 рядов...
  60.   if (table.getRowCount() > 10) {
  61.     // ...удаляем самый старый ряд:
  62.     table.removeRow(0);
  63.   }
  64.  
  65.   // записываем эти данные обратно в тот же CSV-файл...
  66.   saveTable(table, "data/data.csv");
  67.   // ...и снова загружаем данные из него:
  68.   loadData();
  69. }
  70.  
  71.  
  72.  
  73.  
  74. // класс «Bubble»
  75.  
  76. class Bubble {
  77.   float x,y;
  78.   float diameter;
  79.   String name;
  80.  
  81.   boolean over = false;
  82.  
  83.   // создание объекта «Bubble»:
  84.   Bubble(float x_, float y_, float diameter_, String s) {
  85.     x = x_;
  86.     y = y_;
  87.     diameter = diameter_;
  88.     name = s;
  89.   }
  90.  
  91.   // проверяем, находится ли курсор над объектом «Bubble»:
  92.   void rollover(float px, float py) {
  93.     float d = dist(px,py,x,y);
  94.     if (d < diameter/2) {
  95.       over = true;
  96.     } else {
  97.       over = false;
  98.     }
  99.   }
  100.  
  101.   // показываем пузырь:
  102.   void display() {
  103.     stroke(0);
  104.     strokeWeight(2);
  105.     noFill();
  106.     ellipse(x,y,diameter,diameter);
  107.     if (over) {
  108.       fill(0);
  109.       textAlign(CENTER);
  110.       text(name,x,y+diameter/2+20);
  111.     }
  112.   }
  113. }

См.также

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

  1. processing.org - Loading Tabular Data by Daniel Shiffman.