首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Kotlin进行多列文件解析

使用Kotlin进行多列文件解析
EN

Stack Overflow用户
提问于 2019-06-01 03:10:14
回答 2查看 471关注 0票数 1

我有一个四列的文本文件,想用它创建两个向量。我打算使用第一列和第二列作为混合索引。所以第一列和第二列是整数,第三列和第四列是双精度。在FORTRAN中它将是:

代码语言:javascript
复制
10 READ("4Column_file.txt",*,END=20)N,M,T1,T2
   IG=(N*(N+1))/2+M+1
   CC(IG)=T1
   CS(IG)=T2
   GOTO 10 
20 CONTINUE

我是如何使用Kotlin或Java来实现的呢?

输入的格式为:

代码语言:javascript
复制
5   5  -0.244048470535508183D+00  -0.129800076712784507D+01
6   0  -0.468652527040705080D+01   0.000000000000000000D+00 

输出将是加载的CCIG和CSIG向量。

例如,在第一行中:cs21=-0.244048470535508183D+00和IG=(5*(5+1))/2+5+1=21 =-0.129800076712784507D+01。

在第二行:IG=(6*(6+1))/2+5+1=27 so CC27=-0.468652527040705080D+01和CS27=0.000000000000000000D+00

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-01 15:13:07

您可以在Kotlin中执行此操作:

代码语言:javascript
复制
val length = 20 // Some default length
val cc = arrayOfNulls<String>(length)
val cs = arrayOfNulls<String>(length)

val lineRegex = "\\s+".toRegex()

File("4Column_file.txt").useLines { lineSequence ->
    for (line in lineSequence) {
        val (n, m, t1, t2) = line.split(lineRegex)
        val nInt = n.toInt()
        val mInt = m.toInt()

        val ig = (nInt * (nInt + 1)) / 2 + mInt + 1
        cc[ig] = t1
        cs[ig] = t2
    }
}

如果您事先不知道长度,则需要先将所有行读取到某个数据类中。然后,您需要找到ig的最大值,并创建该大小的数组。类似于:

代码语言:javascript
复制
data class Row(val n: Int, val m: Int, val t1: String, val t2: String) {
    val ig: Int = (n * (n + 1)) / 2 + m + 1
}

// rowList is List<Row> after parsing
val maxIdx = rowList.maxBy { it.ig } ?: -1

val cc = arrayOfNulls<String>(maxIdx + 1)
val cs = arrayOfNulls<String>(maxIdx + 1)

for (row in rowList) {
    cc[row.ig] = row.t1
    cs[row.ig] = row.t2
}
票数 1
EN

Stack Overflow用户

发布于 2019-06-01 15:25:47

您可以使用像univocity-parsers这样的库。有一个关于解析制表符分隔文件的教程:

https://www.univocity.com/pages/univocity_parsers_tsv.html#working-with-tsv

由于Kotlin是在JVM上运行的,并且是100% interoperable with Java,所以您可以简单地包含univocity-parsers jar as dependency,而不是自己编写它-这里是Maven坐标:

代码语言:javascript
复制
<dependency>
  <groupId>com.univocity</groupId>
  <artifactId>univocity-parsers</artifactId>
  <version>2.8.2</version>
</dependency>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56400571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档