我现在是新人,涉及groovy。我做了一个名为parseCsvFile
的简单函数。此功能从CSV文件中读取。但是,当我尝试println
时,我看不到值,而是import au.com.bytecode.opencsv.CSVReader
。我的最终目标是读取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
}
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
答案 0 :(得分:1)
由于你使用的是groovy,你可以简单地使用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 as File
@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
声明
答案 1 :(得分:0)
好吧,你可能不应该使用古代版本的库。在您使用的版本(< = 2.3)中,CSVReader
不是Iterable
的实例,因此调用的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 }
}
结果是
au.com.bytecode.opencsv.CSVReader@31e9a763
========================
[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]