|
同学们,上课!今天进行Table数据类型的实践课!
[pre lang="rocessing" line="1"]/**
* 读取Table数据
* by Daniel Shiffman.
*
* 这个例子示范了如何使用 loadTable()
* 去取出数据从CSV文件中并生成一个对象从数据中
* CSV是(逗号分隔值)的英文缩写,通常都是纯文本文件。
*建议使用WORDPAD或是记事本(NOTE)来开启,
*再则先另存新档后用EXCEL开启,也是方法之一。
*开启后的CSV档包含了四或五个字段(部分),
*由左至右分别记载着:文件名称(XXXX.JPG)、档案大小(以BYTE为单位)、
*CRC32值(八个英文字母或数字组成)、档案路径和档案内容描述。
*而其中第四栏「档案路径」因为每个人储存整理图档的方式不同,
*所以本栏通常不存在,而一般有含有「档案路径」这栏的CSV档,又称为ECSV档案。
*
* 本例中 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) {//这个循环相当于for(int i=0;i《bubbles。lenght;i++)
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");
// 这个bubbles数组的大小是根据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");
// 让气泡对象接受数据
bubbles[rowCount] = new Bubble(x, y, d, n);
rowCount++;//行计数器自加1
}
}
void mousePressed() {
// 创建一个新的行
TableRow row = table.addRow();
// 保存值
row.setFloat("x", mouseX);
row.setFloat("y", mouseY);
row.setFloat("diameter", random(40, 80));
row.setString("name", "Blah");
// 写进csv文件中
saveTable(table,"data/data.csv");
// 然后再从新读一遍csv文件
loadData();
}
//一个气泡类
class Bubble {
float x,y;//位置
float diameter;//直径
String name;//名字
boolean over = false;
// 构造函数,创建气泡用的。
Bubble(float x_, float y_, float diameter_, String s) {
x = x_;
y = y_;
diameter = diameter_;
name = s;
}
// 当鼠标在气泡上
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);
}
}
}[/code]
效果很明显,Table将永久的保存你画过的圆,那么这节课就上到这里。下课!{:soso__13766225770624999893_7:} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|