代码之家  ›  专栏  ›  技术社区  ›  sfgroups

带反斜杠的groovy opencv读取值(例如“域\用户”)。

  •  1
  • sfgroups  · 技术社区  · 5 年前

    在groovy中,我使用opensv解析csv文件。我的代码不是用反斜杠处理值。

    我的输入文件具有此值

    value1,domain\user,value2
    

    这是我的groovy代码。

       def filename = 'C:\\Temp\\list.txt'
        CSVReader csvReader = new CSVReader(new FileReader(filename))
        String[] nextRecord       
        while ((nextRecord = csvReader.readNext()) != null) {
            println nextRecord
        }
        csvReader.close()
    

    它打印第二个文件的值,并去掉反斜杠。

    [value1, domainuser, value2]
    

    如何处理opencv中的反斜杠值?

    谢谢 锶

    企业的价值 Apache公共分析器工作正常。

    Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(new FileReader(filename));
    for (CSVRecord record : records) {
        String f1 = record.get(0);
        String f2 = record.get(1);
        String f3 = record.get(2);
        println f1
        println f2
        println f3
    }
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Dmitry Khamitov    5 年前

    在3.9版中,除了csvparser之外,OpenCSV还引入了一个解析器。CSVReader的基础是解析器。这个新的解析器称为rfc4180parser。AS official documentation 状态

    rfc4180为所有关键问题定义了一个标准,即如何精确地格式化csv文件…

    csvparser和rfc4180parser之间的主要区别在于csvparser使用转义字符表示“不可打印”字符,而rfc4180规范将第一个和最后一个引号之间的所有字符都视为福音(双引号除外,该双引号由双引号转义)。

    所以尝试使用Opencsv3.9+和rfc4180解析器。它对我有用

    def parser = new RFC4180ParserBuilder().build()
    def reader = new CSVReaderBuilder(new FileReader(filename)).withCSVParser(parser).build();
    println reader.readNext()
    

    输出:

    [value1, domain\user, value2]
    

    如果出于某种原因您不能使用3.9及更高版本,您可以设置旧的解析器,以便转义字符是其他字符而不是反斜杠。但在这种情况下,如果原始文件的创建者根据 official documentation

    …有时字段本身的数据中包含分隔符,因此需要引号字符。这些引用字符也可以包含在数据中,因此需要一个转义字符…

    所以我的建议是使用3.9+版和rfc4180解析器