Reputation: 3432
I am using uniVocity in order to parse two different files. For every line of the first file I need to iterate through file 2 in order to make some comparisons.
RowListProcessor rowProcessor = new RowListProcessor();
CsvParserSettings settings = new CsvParserSettings();
settings.setRowProcessor(rowProcessor);
settings.setLineSeparatorDetectionEnabled(true);
settings.setHeaderExtractionEnabled(true);
settings.setSkipEmptyLines(true);
CsvParser file1Parser = new CsvParser(settings);
CsvParser file2Parser = new CsvParser(settings);
Do I need to use different CsvParserSettings
for the two parsers, or is there some other way to define rowProcessor
s?
Also how can I read the files line by line in order to perform the operations I need in each line?
Upvotes: 2
Views: 322
Reputation: 6289
You can use the same settings, but will need new rowProcessor
for each parser if you are going to run both parsers at the same time.
RowListProcessor anotherRowProcessor = new RowListProcessor();
settings.setRowProcessor(anotherRowProcessor); //using the same settings object here
CsvParser file2Parser = new CsvParser(settings);
However, from what you described it seems you'd be fine by not using a row processor and just iterate over the rows produced by each parser. In this case just get rid of the row processors, and do this:
CsvParser file1Parser=new CsvParser(settings);
CsvParser file2Parser=new CsvParser(settings);
file1Parser.beginParsing(file1);
file2Parser.beginParsing(file2);
String[] rowOfParser1;
String[] rowOfParser2;
while((rowOfParser1 = file1Parser.parseNext()) != null){
rowOfParser2 = file2Parser.parseNext();
//do whatever you need to do with the rows.
}
//only need to call this if you are not reading both inputs entirely
file1Parser.stopParsing();
file2Parser.stopParsing();
Hope this helps.
Upvotes: 2