0

csvベースのファイルをペアリングしているクラスがありますが、トークンシンボルのパラメーターを設定したいと思います。関数を変更してプログラムで使用する方法を教えてください。

class CSVParser{  
  static def parseCSV(file,closure) {  
        def lineCount = 0
        file.eachLine() { line ->  
            def field = line.tokenize(';')  
            lineCount++  
            closure(lineCount,field)  
        }  
    }  
} 


use(CSVParser.class) {  
    File file = new File("test.csv")  
    file.parseCSV { index,field ->  
        println "row: ${index} | ${field[0]} ${field[1]} ${field[2]}"  
    }  
} 
4

2 に答える 2

2

fileとパラメータの間にパラメータを追加する必要がありclosureます。

静的メソッドを使用してカテゴリクラスを作成する場合、最初のパラメータはメソッドが呼び出されるオブジェクトであるため、最初に指定するfile必要があります。

最後のパラメーターとしてクロージャーを指定すると、クロージャーのオープンブレースが括弧なしで関数呼び出しの後に続く構文が可能になります。

外観は次のとおりです。

class CSVParser{  
    static def parseCSV(file,separator,closure) {  
        def lineCount = 0
        file.eachLine() { line ->  
            def field = line.tokenize(separator)  
            lineCount++  
            closure(lineCount,field)  
        }  
    }  
} 

use(CSVParser) {  
    File file = new File("test.csv")  
    file.parseCSV(',') { index,field ->  
        println "row: ${index} | ${field[0]} ${field[1]} ${field[2]}"  
    }
}
于 2013-01-15T23:10:39.590 に答える
1

parseCSVメソッドの 2 番目のパラメーターとしてセパレーターを追加するだけです。

class CSVParser{  
  static def parseCSV(file, sep, closure) {  
    def lineCount = 0
    file.eachLine() { line ->  
      def field = line.tokenize(sep)  
      closure(++lineCount, field)  
    }  
  }  
} 

use(CSVParser.class) {  
  File file = new File("test.csv")  
  file.parseCSV(";") { index,field ->  
    println "row: ${index} | ${field[0]} ${field[1]} ${field[2]}"  
  }  
} 
于 2013-01-15T23:07:53.077 に答える