【问题标题】:Groovy: generator of file with random nuber of linesGroovy:具有随机行数的文件生成器
【发布时间】:2016-01-12 10:42:04
【问题描述】:

我需要编写一个Groovy 脚本来生成.txt 文件。每个文件必须包含如下行:

12:43:10  12345678  -49376952  
// time, variable1, variable2

首先,如何定义随机行数?

其次,如何根据行数覆盖每行的变量? 我的意思是,说它将包含 3 行,它必须看起来像

time, variable1.1, variable2.1

time, variable1.2, variable2.2

time, variable1.3, variable2.3

我是新手,很高兴收到任何建议!

【问题讨论】:

  • 我纠正了几个拼写/格式错误。

标签: file random groovy generator


【解决方案1】:

您已经做了一些聪明的事情:您已经将问题分解为多个部分。分解是解决问题的方式。

看看 Java 的 Random 类。

您需要的不仅仅是一个随机数:您需要一个介于 1 和某个最大值之间的数字。这个文本文件可以有多大?一百万行可以吗?

时间可以是你写行时的时间戳。它必须有多独特?您应该包括小时、分钟、秒、毫秒、纳秒吗?

变量也是随机的吗?不知道你说的覆盖是什么意思。

这将在 Java 中完成。也许它会指导您使用 Groovy。我将输出写入控制台;我将把如何写入文件作为练习留给你:

import java.util.Random;

/**
 * Demo of how to do it in Java
 * User: mduffy
 * Date: 10/14/2015
 * Time: 7:38 AM
 * @link http://stackoverflow.com/questions/33123709/groovy-generator-of-file-with-random-nuber-of-lines/33123830?noredirect=1#comment54060700_33123830
 */
public class RandomDemo {
    public static void main(String[] args) {
        int maxLines = new Random().nextInt(15);
        int numVariables = 2;
        for (int i = 0; i < maxLines; ++i) {
            StringBuilder builder = new StringBuilder(1024);
            long currentNanos = System.nanoTime();
            builder.append(currentNanos).append('\t');
            for (int j = 0; j < numVariables; ++j) {
                builder.append("variable-").append(i+1).append('.').append(j+1).append('\t');
            }
            System.out.println(builder.toString());
        }
    }
}

【讨论】:

  • 感谢您的回答!让最大行数为 15。我可以定义 time1,variable1,如 $variables.no,variable2,如 $variables.no2 其中 no 获取随机数也许它可能是某个循环,它将覆盖每一行的这个变量,但我不知道该怎么做..例如,这将是 5 行是否可能,该循环将采用映射 [time1,variable1,variable2] 并将覆盖 5 个条目,例如 time2,variable1.2,variable2。 2 time3, variable1.3, variable2.3 ... time5, variable1.5, variable2.5
  • 非常感谢!将尝试为 groovy 改编代码
【解决方案2】:

这是一种可能的更时髦的方法。请注意,由于执行速度非常快,因此每一行的时间很可能是相同的。

int maxLines = new Random().nextInt(20)
def now
new File("myFile.txt").withWriter { out ->
    (1..maxLines).eachWithIndex{n, i ->
        now = new Date()
        out.println now.format("HH:mm:ss")+' variable1.'+(i+1)+' variable2.'+(i+1)
    }
}

【讨论】:

  • Groovier 仍然:out.println "${new Date().format("HH:mm:ss")} variable1.${i+1} variable2.${i+1}"
  • 甚至更时髦:maxLines.times { i -&gt; out.println "${new Date().format("HH:mm:ss")} variable1.${i+1} variable2.${i+1}" }
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2017-08-04
  • 1970-01-01
相关资源
最近更新 更多