处理2:使用文件名中的时间戳将键盘输入保存为.text文件

时间:2015-03-21 13:28:31

标签: text timestamp processing keyboard-events

我正处于一个雄心勃勃的(对我来说)项目的开始,在我的创意媒体硕士的处理2中。

我想创建一种连锁小说,用户可以在其中添加长篇连续叙述,但每个用户的输入都保存为单独的文本文件并打印在单独的索引卡上。

我的问题(许多人中的第一个)是在保存单个.txt文件时,这些文件是每个用户输入的记录,我希望文件名包含时间戳。

我用过     textFile = createWriter(timestamp + .txt); 作为当前的占位符,但这显然不是“事物”......

这是我到目前为止所做的:

//Code adapted from examples by Amnon available here:     https://amnonp5.wordpress.com/2012/01/28/25-life-saving-tips-for-processing/ 
//and Daniel Shiffman available here: http://www.learningprocessing.com/examples/chapter-18/example-18-1/



String myText = "Give me your story.";
String yourText = ""; // Variable to store text currently being typed
String savedText = ""; // Variable to store saved text when control is hit
PrintWriter textFile;

void setup() {
  size(500, 500);
  textAlign(CENTER, CENTER);
  textSize(30);
  fill(0);
  // Create a new file in the sketch directory
  timestamp = year() + nf(month(),2) + nf(day(),2) + "-"  + nf(hour(),2) + nf(minute(),2) + nf(second(),2);
  textFile = createWriter(timestamp+.txt);
}

void draw() {
  background(255);
  text(myText, 0, 0, width, height);
  text(yourText, 0, 0, width, height);
  text(savedText, 0, 0, width, height);
{
  textFile.println("savedText");
  textFile.flush();
  textFile.close();
  exit();
 } 
  }

void keyPressed() {
  if (keyCode == ENTER) {
    myText="";}
  if (keyCode == BACKSPACE) {
    if (yourText.length() > 0) {
      yourText = yourText.substring(0, yourText.length()-1);
  }
  } 
  else if (keyCode == DELETE) {
    yourText = "";
  } 
  else if (keyCode != SHIFT && keyCode != CONTROL && keyCode != ALT) {
    yourText = yourText + key;
  }
    // If the Control key is pressed, save the String and clear it
  if (key == CODED) 
  {
    if (keyCode == CONTROL) {
    savedText = yourText;
    // Text is cleared
    yourText = ""; 
  } else {
    // Otherwise, concatenate the String
    // Each character typed by the user is added to the end of the String variable.
    yourText = yourText + key; 
  }
}
}

正如您所知,我对代码是全新的,上面的内容不是优雅的代码,可能让您的眼睛流血。如果您有任何建议可以让它更好,或者比命名多个.txt文件的时间戳更好,请告诉我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

欢迎使用StackOverflow和编码!

Processing,它是Java的变体,is strongly typed意味着每个变量都需要以其正确的类型声明,因此遵循自己的predictability

规则

问题出现在这一行:

textFile = createWriter(timestamp+.txt);

以及随附的错误:

unexpected token .

如果您在“参数”部分的the processing reference中查看createWriter,则说明它包含字符串

解决方案是将您的行更改为此(请注意"" 在.txt附近):

textFile = createWriter(timestamp+".txt");

问题在于,除非您在代码中实际将一段文本定义为字符串,否则它将被视为一个字符串。不会被视为String,而是被视为要评估的一段代码。

当处理到达行并在createWriter的括号内时,它找到timstamp+,然后找到一个点。你的意思是只是将.txt粘贴在时间戳的末尾,但除非你将它定义为一个字符串(如:".txt"),否则它将无法理解,并会尝试评估你在那里的任何东西。

为了理解差异,可能还有另一个例子:

创建一个新草图并添加:

String s = "one";
println(s + " two");
println(s + " + two");

如果你运行它,你会在控制台下面看到两行出现:

one two
one + two

正如您所看到的,第一行只包含我们的变量s以及字符串" two"(注意开头的空格),第二行包含变量s和字符串" + two"

从这里拿走的主要内容是,在一种情况下,+是连接字符串的运算符,而在另一种情况下,它只是我们想要使用的实际文本。