2017-10-06 70 views
0

原谅我,如果这是一个基本的问题,我是相当新的Groovy和一直在阅读大量的材料,以及试图了解相关的东西。常规CSV访问

问题: - 我想要的是 通过任何给定的字段值搜索数据 - 例如:按产品名称搜索ex:apple,它应该显示与所有具有apple的行一样的输出。

CSV文件例如: -

product_name, shipdate , arrivedate, prize 
    apple, 10/09/2017, 11/09/2017, 100 
    mango, 10/26/2017 ,11/09/2017, 200 
    pineapple, 12/10/2017, 12/20/2017, 200 

更澄清的问题: - 所以只是举例,如果200用户的搜索奖品它应该显示第2和第3排。

import java.io.File 
 
class Example { 
 
    static void main(String[] args) { 
 
     new File("Example.csv").eachLine { 
 
     line -> println "$line"; 
 
     } 
 
    } 
 
}

从我的身边,我能够读取所有CSV文件,但不知道如何通过现场。任何帮助将不胜感激搜索数据。

+0

请编辑的问题将其限制在特定的有足够的细节来确定适当的答案的问题。避免一次询问多个不同的问题。请参阅[如何提问](http://stackoverflow.com/help/how-to-ask)页面以获得澄清此问题的帮助。 – Vampire

+0

@Vampire: - 我的问题是如何将搜索任何领域例如: - 奖金200,这样我就可以得到具有200 prize.output要打印第2和第3行中的所有行。 –

+0

@priyavenkat,'1)'请提供代码如何加载和解析csv数据。 btw是它的文件还是什么? '2)'提供数据(文件)样本 - 我的意思是在csv中应该有一个分隔符(昏迷或其他)。 – daggett

回答

0

如果您的CSV文件不包含复杂的CSV数据(与值的新行或昏迷)

那么代码可能是这样的:

//the reader could be created from file: file.newReader() 
def reader = new StringReader('''product_name,shipdate,arrivedate,prize 
apple,10/09/2017,11/09/2017,100 
mango,10/26/2017,11/09/2017,200 
pineapple,12/10/2017,12/20/2017,200 
''') 

def headers=null 
reader.splitEachLine(','){line-> 
    //remove spaces 
    line=line.collect{it.trim()} 
    if(headers==null){ 
     //convert headers array to [name:index] map 
     headers = line.withIndex().collectEntries() 
    }else{ 
     //print line only when you have a valid value in line 
     if(line[ headers['prize'] ]=='200'){ 
      println line 
     } 
    } 
} 
+0

感谢@daggett: - 但是,如果用户搜索10月份SHIPDATE所有订单。它应该显示第一和第二行。这将如何在这里工作。 –

+0

使用[Date.parse( “MM/DD/YYYY”,值)](http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Date.html#parse(java的.lang.String,%20java.lang.String))函数将字符串值转换为日期。还可以查看[java Date](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)类的方法来访问日期字段 – daggett