【问题标题】:Last Line of File in GroovyGroovy 中的最后一行文件
【发布时间】:2011-11-01 18:55:08
【问题描述】:

根据我的研究,读取文本文件的最后一行似乎很复杂。我有一个文本文件,它基本上由行块组成,每个块由一个空行分隔。我写了一个 Groovy 脚本,它可以通过它后面的空行来识别每个块。我正在数段落。

我的问题是我的最后一个块后面没有空行(这些块是由另一个程序生成的,它们不仅仅是我输入的文件)

我在想我可以通过在我的文件末尾附加一个空行然后运行我的脚本来解决这个“读取文件的最后一行”问题。这很聪明,还是和读最后一行一样难?

如果可以,我该怎么做?

【问题讨论】:

  • 回滚到原来的问题..您不能等待提交答案然后完全改变问题...
  • 对不起,我不是故意改变问题的。我问的是同样的事情,只是用更少的话说。我想在我的文本文件末尾附加一个空行,以便我的脚本识别文件中的最后一个块。
  • 不修复您的脚本,以便它可以处理没有尾随\n 的文件?顺便说一句,我将此添加到答案的底部...

标签: file text groovy line


【解决方案1】:

据我所知,您有两种选择。

如果您可以将整个文件加载到内存中,您可以执行以下操作:

int countBlocksInMem( File f ) {
  f.readLines().with { lines ->
    int size = lines.grep { it == '' }.size()
    if( lines[ -1 ] != '' ) size++
    size
  }
}

如果它太大而无法加载到内存中,您可以这样做:

int countBlocks( File f ) {
  String lastLine
  int size = 0
  f.eachLine { line ->
    lastLine = line
    if( !line ) size++
  }
  if( lastLine ) size++
  size
}

这两种方法基本上都是将空行数相加,如果文件最后一行不为空,则计数加1

问题完全改变后编辑

要将空行附加到文件中,您可以这样做:

new File( 'file.txt' ) << '\n'

或者,和作家一起

new File( 'file.txt' ).withWriterAppend {
  it.writeLine()
}

当然,如果你有多个东西同时写入同一个文件,这只会产生混乱

【讨论】:

  • 感谢蒂姆所做的一切。如果我想在文件的末尾附加一个空白怎么办?
  • @blaughli To append a blank line to a file, you can just do: 之后的代码不起作用吗?
  • @blaughli 不用担心,很高兴为您提供帮助 :-)
【解决方案2】:

这是 google 上第一次点击文件 groovy 的最后一行。 对于那些寻求快速简便的方法来获取最后一行的人:

    new(File("/home/user/somefile.txt").eachLine{
        if(it != null){
            lastLine = it
        }
    }

.eachLine 遍历文本文件的每一行,并将 lastLine 设置为 it 变量,直到它为空。很简单

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多