【问题标题】:Reading all csv lines读取所有 csv 行
【发布时间】:2020-11-11 23:03:07
【问题描述】:

我能够将第一行(这是我的csv 文件中的死者)读取为“

import encoding.csv

    path:="file.csv"
    //mut f := os.read_file(path) or {println(err) return}
    f := os.read_file(path)?
    c:=csv.new_reader(f)
    r:=c.read()?

    println(r)

但是我怎样才能阅读那里的所有行呢?

我试过了:

    path:="file.csv"
    rows := os.read_lines(path)? 
    for row in rows {
        mut c:=csv.new_reader(row)
        mut r:=c.read()?
        println(r)
    }

但我得到了:

V panic: encoding.csv: could not find any valid line endings
print_backtrace_skipping_top_frames is not implemented

【问题讨论】:

    标签: vlang


    【解决方案1】:

    V 尚未达到 v1.0。因此,可以预料这样的事情不会起作用。在 vlang GitHub 存储库上打开一个问题可能比在这里寻求帮助更好。

    【讨论】:

    • 谢谢,刚刚同意了
    【解决方案2】:

    这是一种解决方案:

    import os
    import encoding.csv
    
    fn main() {
        content := os.read_file('./file.csv') ?
        mut reader := csv.new_reader(content)
        reader.read() ? // Skip the first line
        for {
            line_data := reader.read() or {
                break
            }
            println(line_data)
        }
    }
    

    我的文件file.csv 包含以下几行:

    a,b,c
    a1,b2,c3
    a4,b5,c6
    

    我得到这个结果:

    ['a1', 'b2', 'c3']
    ['a4', 'b5', 'c6']
    

    【讨论】:

    • 你能为我解释一下吗line_data := reader.read() or { break }
    • Reader.read 返回一个可选值(请参阅文档,不幸的是我在手机上,所以我无法直接链接到正确的部分,但有一个部分称为“选项/结果类型和错误处理”:github.com/vlang/v/tree/master/doc%2Fdocs.md)。在这里,我使用or的方式处理错误/空值到break的循环外。
    猜你喜欢
    • 2016-12-15
    • 1970-01-01
    • 2018-02-01
    • 2019-06-27
    • 2016-08-02
    • 1970-01-01
    • 2019-03-08
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多