2017-10-02 16 views
1

現在、私はgroovyを使用しています。私はparseCsvFileという簡単な関数を作った。この関数はCSVファイルから読み込みます。しかし、私がprintlnを試してみると、値が表示されず、その代わりにimport au.com.bytecode.opencsv.CSVReaderが表示されます。私の最終的な目標は、csvファイルを読み込んで、データに基づいてキー値のペアを作成することです。どのように私はそれを達成するために最高のだろうか?構文解析のためのCSVファイルの解析とキー値のペアの作成

機能:CSVの

import au.com.bytecode.opencsv.CSVReader 
import au.com.bytecode.opencsv.CSVParser 

def parseCsvFile(String csvFilePath){ 
    if (fileExists(csvFilePath)) { 
     new File(csvFilePath).withReader { reader -> 
      CSVReader csvReader = new CSVReader(reader) 
      csvReader.each { fields -> 
       println fields 
      } 
     } 
    } else { 
     throw error 
    }   

    //return a key value array 
} 

例:

GAME_ID,GAME_NAME,OLD_OWNER_NAME,NEW_OWNER_NAME,ORG_NAME 
20001,str.git,Gemini,Kitoshi,Blue-DiamondGames 
30001,str.git,Kashi,Sensu,FlyingMonkey 
+0

MaryCoding、それが役立つかどうかを確認してください。 – Rao

答えて

1

になり、あなたは簡単な使用groovycsvとはとてもシンプルで同じことを実現できます。

例 - csv as String

@Grab('com.xlson.groovycsv:groovycsv:1.1') 
import static com.xlson.groovycsv.CsvParser.parseCsv 

def csv = """GAME_ID,GAME_NAME,OLD_OWNER_NAME,NEW_OWNER_NAME,ORG_NAME 
20001,str.git,Gemini,Kitoshi,Blue-DiamondGames 
30001,str.git,Kashi,Sensu,FlyingMonkey""" 

def data = parseCsv(csv) 
for(line in data) { 
    println "$line.GAME_ID $line.GAME_NAME" 
} 

ファイルのデータを使用することもできます。ただ、csvファイルに上記のデータを入れて、FileReaderへの入力を提供し、以下に示すようにparseCsvメソッドに渡し:

例 - ファイルとしてCSV

@Grab('com.xlson.groovycsv:groovycsv:1.1') 
import static com.xlson.groovycsv.CsvParser.parseCsv 
//Change the filepath as per your environment 
def data = parseCsv(new FileReader('/tmp/game.csv')) 
for(line in data) { 
    println "$line.GAME_ID $line.GAME_NAME" 
} 

注:あなたは、カラムを使用することができるはずですあなたが上記に気付いた場合にデータを参照する名前。printlnステートメント

+0

'au.com.bytecode.opencsv.'からのインポートでこれを実行できますか?何らかの理由で、私が入っている環境が 'com.xlson.groovycsv.'を解決しません。 – MaryCoding

+0

上記のスクリプトをどうやって実行していますか?あなたは答えの中の提供されたリンクに行き、ライブラリと上記の依存関係をダウンロードすることができます。その後、それらをクラスパスに追加します。あなたは行くのが良いと思う。 'groovycsv'はあなたが使用しようとしているシーンの背後でのみ' opencsv'を使います。 – Rao

0

さて、あなたはおそらく図書館の古代のバージョンを使用しないでください。使用しているバージョン(< = 2.3)では、CSVReaderIterableのインスタンスではないため、eachメソッドはObjectから呼び出され、オブジェクト自体を反復処理します。同じライブラリのより新しいバージョン(> = 2.4)を使用すると(パッケージ名と座標がリファクタリングされた)、それは魅力的なように機能します。ここで

例:以下に示すように

@Grab('net.sf.opencsv:opencsv:2.3') 
import au.com.bytecode.opencsv.CSVReader as opencsv23 
@Grab('com.opencsv:opencsv:4.0') 
import com.opencsv.CSVReader as opencsv40 

new StringReader(
'''GAME_ID,GAME_NAME,OLD_OWNER_NAME,NEW_OWNER_NAME,ORG_NAME 
20001,str.git,Gemini,Kitoshi,Blue-DiamondGames 
30001,str.git,Kashi,Sensu,FlyingMonkey''' 
).withReader { reader -> 
    new opencsv23(reader).each { println it } 
    println '========================' 
    new opencsv40(reader).each { println it } 
} 

あなたがグルーヴィー使用しているので

[email protected] 
======================== 
[GAME_ID, GAME_NAME, OLD_OWNER_NAME, NEW_OWNER_NAME, ORG_NAME] 
[20001, str.git, Gemini, Kitoshi, Blue-DiamondGames] 
[30001, str.git, Kashi, Sensu, FlyingMonkey]