gpt4 book ai didi

java - 使用 Kotlin 解析多列文件

转载 作者:行者123 更新时间:2023-11-30 01:50:03 25 4
gpt4 key购买 nike

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

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 做到这一点?

输入的形式为:

5   5  -0.244048470535508183D+00  -0.129800076712784507D+01
6 0 -0.468652527040705080D+01 0.000000000000000000D+00

输出将是加载的 CC[IG] 和 CS[IG] vector 。

例如第一行: IG=(5*(5+1))/2+5+1=21所以 CC[21]=-0.244048470535508183D+00 和 CS[21]=-0.129800076712784507D+01。

第二行: IG=(6*(6+1))/2+5+1=27所以 CC[27]=-0.468652527040705080D+01 和 CS[27]=0.000000000000000000D+00

最佳答案

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

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 的最大值,并创建该大小的数组。像这样的东西:

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
}

关于java - 使用 Kotlin 解析多列文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com