groovyiterationxmlslurperstringwritermarkupbuilder

why groovy each function not iterating while inside another one


why groovy .each function is only one time iterating while it lies inside another one iteration like shown below code ?

Code:

@Grab('com.xlson.groovycsv:groovycsv:1.1')
import static com.xlson.groovycsv.CsvParser.parseCsv
import groovy.xml.MarkupBuilder
import groovy.xml.StreamingMarkupBuilder
def input = "input.xml"
def xml = new XmlSlurper().parse(input)
df = new FileReader("file.csv")
def writer = new StringWriter()
def data = parseCsv(df, readFirstLine: true)
new MarkupBuilder(writer).root {
    xml.children().each {
        it.attributes()
        println ("Here I am")
        data.eachWithIndex { row,id->                     
            println ("This line should be iterated all time") // but iterated only one time             
        }
    }
}

Output Comes like this,

    Here I am
    This line should be iterated all time
    This line should be iterated all time
    This line should be iterated all time
    Here I am
    Here I am

Expected Output:

Here I am
This line should be iterated all time
This line should be iterated all time
This line should be iterated all time
Here I am
This line should be iterated all time
This line should be iterated all time
This line should be iterated all time
Here I am
This line should be iterated all time
This line should be iterated all time
This line should be iterated all time

Solution

  • That's because parseCsv returns an Iterator, not an Iterable:

    See in source code of groovycsv library:

    static Iterator parseCsv(Map args = [:], String csv) {
        new CsvParser().parse(args, csv)
    }