2017-10-06 108 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