android - 在 Kotlin 中逐行读取 CSV

标签 android csv kotlin

我正在编写一个简单的导入应用程序,需要读取一个 CSV 文件,在一个网格中显示结果并在另一个网格中显示 CSV 文件的损坏行。

是否有任何内置库或任何简单的类似 pythonic 的方式?

我在安卓上做。

最佳答案

[2019 年 10 月编辑] 在我写下这个答案几个月后,Koyama Kenta wrote a Kotlin targeted library可以在 https://github.com/doyaaaaaken/kotlin-csv 找到在我看来,它比 opencsv 好得多。

使用示例:(有关更多信息,请参阅提到的 github 页面)

import com.github.doyaaaaaken.kotlincsv.dsl.csvReader

fun main() {
    csvReader().open("src/main/resources/test.csv") {
        readAllAsSequence().forEach { row ->
            //Do something
            println(row) //[a, b, c]
        }
    }
}

有关此示例的完整最小项目,请参阅 https://github.com/PHPirates/kotlin-csv-reader-example

使用 opencsv 的旧答案:

按照建议,使用opencsv很方便.下面是一个小例子:

// You can of course remove the .withCSVParser part if you use the default separator instead of ;
val csvReader = CSVReaderBuilder(FileReader("filename.csv"))
        .withCSVParser(CSVParserBuilder().withSeparator(';').build())
        .build()

// Maybe do something with the header if there is one
val header = csvReader.readNext()

// Read the rest
var line: Array<String>? = csvReader.readNext()
while (line != null) {
    // Do something with the data
    println(line[0])

    line = csvReader.readNext()
}

docs 中所示当您不需要单独处理每一行时,您可以得到 Map 形式的结果:

import com.opencsv.CSVReaderHeaderAware
import java.io.FileReader

fun main() {
    val reader = CSVReaderHeaderAware(FileReader("test.csv"))
    val resultList = mutableListOf<Map<String, String>>()
    var line = reader.readMap()
    while (line != null) {
        resultList.add(line)
        line = reader.readMap()
    }
    println(resultList)
    // Line 2, by column name
    println(resultList[1]["my column name"])
}

Gradle 的依赖项:compile 'com.opencsv:opencsv:4.6' 或 Gradle Kotlin DSL:compile("com.opencsv:opencsv:4.6") (与往常一样,在 docs 中检查最新版本。

关于android - 在 Kotlin 中逐行读取 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44061143/

相关文章:

Android Studio 0.8.2 - Gradle 项目同步失败

java - 如何在 Java/Android 中访问圣经文档

android - 如何以编程方式截取 webview 的屏幕截图,捕获整个页面?

android - 使用 FirebaseAuth 电话号码验证进行测试

python - 迭代 CSV 文件以匹配另一个列表中的项目

php - 如何在 yii 1.16 中将 excel 数据导入 mySQL

将csv数据导入mysql的PHP脚本

java - 错误与removeAt java arraylist android

android - 无法在 asyncTask 的 onPostExecute 中 Toast 消息

java - 从 Java 类调用时,Kotlin 数据类复制函数不起作用