从Processing中的TXT文件中读取变量的值

时间:2014-02-16 18:27:12

标签: java processing

我在Proccessing中有以下程序,我试图找到一种从TXT文件中读取变量值的方法。

static final int ribbon_length = 255, H = 200; 

void setup() {
  size(ribbon_length, H); //Διαστάσεις παλέτας
}

void draw() {
  float p = 1;
  int up_y = 10;
  int widthh = 1;
  int height = 180;
  float a = pow (ribbon_length, 1-p);
  float colour = 0;
  for (int step = 0; step <= 255; step++) { 
      colour = a * pow (step, p);
      fill(colour,0,0); 
      rect(widthh*step, up_y, widthh, height);
      noStroke();
   }
}

我想从txt读取的值是

  float p = 1; 
  int up_y = 10; 
  int widthh = 1;
  int height = 180;

我找到BufferedReader命令,但我不确定它是否是我想要的。我试着ρθν一个例子..但它没有用......

BufferedReader reader;
String line;
static final int ribbon_length = 255, H = 200;

void setup() {
  size(ribbon_length, H);
  reader = createReader("positions.txt");  
}
.
.
.
.

任何想法????

修改 谢谢你的回答。 在你的表扬之后我尝试了一些改变。但它没有任何颜色。

static final int ribbon_length = 255, H = 200; 

void setup() {
  size(ribbon_length, H);
}

void draw() {
  String[] lines = loadStrings("input.txt");
  float p = float(split(lines[0], "=")[1]);
  int up_y = int(split(lines[1], "=")[1]);
  int wide = int(split(lines[2], "=")[1]);
  int high = int(split(lines[3], "=")[1]);
  float a = pow (ribbon_length, 1-p);
  float colour = 0;
  for (int step = 0; step <= 255; step++) { 
      colour = a * pow (step, p);
      fill(colour,0,0); 
      rect(wide*step, up_y, wide, high);
      noStroke();
   }
}

2 个答案:

答案 0 :(得分:1)

你可以有一个简单的txt,其中每一行都是一个变量,所以你可以像这样使用BufferedReader。

BufferedReader br = new BufferedReader(new FileReader("fileName.txt"));

然后用br.readLine()读取每一行,然后最后将读取行分配给变量,将其转换为必要的类型。例如,如果您的行是int,则必须执行

int myInt = Integer.parseInt(br.readLine())

您还可以拥有一个属性文件,其中每行的格式为“key = value”。您可以尝试使用此网页加载该属性文件:http://www.mkyong.com/java/java-properties-file-examples/(请参阅第2部分:加载属性文件)

答案 1 :(得分:1)

首先:命名变量widthheight是个坏主意,因为这些是构建在Processing中的特殊变量。你应该使用不同的东西,比如widehigh

最简单的方法是使用这样的裸文本文件:

1
10
1
180
就像我写的一样。然后,您可以使用Processing的内置函数来读取这些值。这些是xp500的答案提供的更容易的替代品,这是纯java的正确答案。

void setup(){
  ....
  String[] lines = loadStrings("positions.txt");
  float p = float(lines[0]);
  int up_y = int(lines[1]);
  int wide = int(lines[2]);
  int high = int(lines[3]);
  ....
}

这将有效,但由于存在大量硬编码值,因此无法维护。如果文本文件顶部有一个额外的空行怎么办?第一行(lines[0])不具有p的值,第二行(lines[1])将具有p的值,而不是up_y }的!这只是要记住的事情。如果您最终在文本文件中有其他内容(例如变量名称),则可以使用split()从字符串中获取数字。例如:

文本文件:

p=1
up_y=10

处理代码:

String[] lines = loadStrings("input.txt")
float p = float(split(lines[0], "=")[1]); // split on the "=" and take the second element
int up_y = int(split(lines[1], "=")[1]);

如果选择这种方法,您甚至可以在分配之前检查行中的变量名称,以防万一文件混乱。像if(!lines[0].contains("p")) print("error!");

这样的东西