You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
My name is Valentin, I am from Romania, I am Java Application Developer and I work for a project by using Spring Batch Core framework.
My project requires to create a batch which reads data from a simple flat file with TAB character as a field separator.
I use your new feature Spring Batch Core 4 class org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder.DelimitedBuilder. In my code, I want to set the TAB delimiter by the next sequence:
I've found +the TAB character is not set as a delimiter+ on the field org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder.DelimitedBuilder.delimiter. I've found that, in general, the delimiter is set by the method org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder.DelimitedBuilder.build() at line 631, by the sequence:
Here the delimiter is checked against the method org.springframework.util.StringUtils.hasText(String). According to the hasText() method specification, "this method returns true if the String is not null, its length is greater than 0, and it contains at least one non-whitespace character." But in the case of TAB character, the string contains only one character (i.e. TAB character) which is a whitespace character, thus the condition is not valid, and the TAB character is not set as a delimiter.
Please correct me if I am wrong. As long as DelimitedLineTokenizer.DELIMITER_TAB constant exists, to exclude the TAB character was not an intention, and maybe this is a bug.
I think the class FlatFileItemReaderBuilder is a very good idea. I have already used this class for other separators. I am looking forward to your feedback.
P.S. For the moment, I have solved the problem by using the classic Spring Batch 3 style.
Best Regards,
Valentin CHIVU
Java Developer
Romania
Valentin CHIVU opened BATCH-2738 and commented
Hi Spring Batch Team,
My name is Valentin, I am from Romania, I am Java Application Developer and I work for a project by using Spring Batch Core framework.
My project requires to create a batch which reads data from a simple flat file with TAB character as a field separator.
I use your new feature Spring Batch Core 4 class org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder.DelimitedBuilder. In my code, I want to set the TAB delimiter by the next sequence:
FlatFileItemReaderBuilder<MyData> flatFileItemReaderBuilder = new FlatFileItemReaderBuilder<>();
FlatFileItemReaderBuilder.DelimitedBuilder<MyData> flatFileItemReaderBuilderDelimited = flatFileItemReaderBuilder.delimited();
flatFileItemReaderBuilderDelimited.delimiter(DelimitedLineTokenizer.DELIMITER_TAB);
// flatFileItemReaderBuilderDelimited.delimiter("\t");
I've found +the TAB character is not set as a delimiter+ on the field org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder.DelimitedBuilder.delimiter. I've found that, in general, the delimiter is set by the method org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder.DelimitedBuilder.build() at line 631, by the sequence:
if(StringUtils.hasText(this.delimiter)) {
tokenizer.setDelimiter(this.delimiter);
}
Here the delimiter is checked against the method org.springframework.util.StringUtils.hasText(String). According to the hasText() method specification, "this method returns true if the String is not null, its length is greater than 0, and it contains at least one non-whitespace character." But in the case of TAB character, the string contains only one character (i.e. TAB character) which is a whitespace character, thus the condition is not valid, and the TAB character is not set as a delimiter.
Please correct me if I am wrong. As long as DelimitedLineTokenizer.DELIMITER_TAB constant exists, to exclude the TAB character was not an intention, and maybe this is a bug.
I think the class FlatFileItemReaderBuilder is a very good idea. I have already used this class for other separators. I am looking forward to your feedback.
P.S. For the moment, I have solved the problem by using the classic Spring Batch 3 style.
Best Regards,
Valentin CHIVU
Java Developer
Romania
Affects: 4.0.1
Reference URL: https://stackoverflow.com/questions/51738718/flatfileitemreader-tab-delimiter-not-working
Referenced from: pull request #626, and commits b11d49a, 80d1a24
Backported to: 4.1.0.M3, 4.0.2
The text was updated successfully, but these errors were encountered: