All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sfm.csv.CsvParser Maven / Gradle / Ivy

package org.sfm.csv;

import java.io.IOException;
import java.io.Reader;
import java.util.Iterator;

//IFJAVA8_START
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
//IFJAVA8_END

import org.sfm.csv.parser.CellConsumer;
import org.sfm.csv.parser.CsvReader;
import org.sfm.csv.parser.CsvStringArrayIterator;
import org.sfm.csv.parser.StringArrayConsumer;
import org.sfm.utils.RowHandler;

public final class CsvParser {

	public final static CellConsumer DUMMY_CONSUMER = new CellConsumer() {

		@Override
		public void newCell(char[] chars, int offset, int length) {
		}

		@Override
		public void endOfRow() {
		}

		@Override
		public void end() {
		}
	};

	public static int _8K = 1 << 13;

	public static final int DEFAULT = _8K;

	@Deprecated
	public CsvParser(){
	}

	public static  CC parse(int bufferSize, Reader r, CC cellConsumer) throws IOException {
		newCsvReader(bufferSize, r).parseAll(cellConsumer);
		return cellConsumer;
	}

	public static  CC parse(final Reader r, final CC cellConsumer) throws IOException {
		newCsvReader(r).parseAll(cellConsumer);
		return cellConsumer;
	}

	public static  CC parse(final Reader r, final CC cellConsumer, int skip) throws IOException {
		CsvReader reader = newCsvReader(r);

		reader.skipLines(skip);

		reader.parseAll(cellConsumer);

		return cellConsumer;
	}

	public static  CC parse(final Reader r, final CC cellConsumer, int skip, int limit) throws IOException {
		CsvReader reader = newCsvReader(r);

		reader.skipLines(skip);

		reader.parseLines(cellConsumer, limit);

		return cellConsumer;
	}

	public static > RH readRows(final Reader r, final RH handler) throws IOException {
		parse(r, new StringArrayConsumer(handler));
		return handler;
	}

	public static > RH readRows(final Reader r, final RH handler, int skip) throws IOException {
		parse(r, new StringArrayConsumer(handler), skip);
		return handler;
	}

	public static > RH readRows(final Reader r, final RH handler, int skip, int limit) throws IOException {
		parse(r, new StringArrayConsumer(handler), skip, limit);
		return handler;
	}


	public static Iterator iterateRows(Reader r) {
		return new CsvStringArrayIterator(newCsvReader(r));
	}

	public static Iterator iterateRows(Reader r, int skip) throws IOException {
		CsvReader csvReader = newCsvReader(r);
		csvReader.skipLines(skip);
		return new CsvStringArrayIterator(csvReader);
	}

	//IFJAVA8_START
	public static Stream stream(Reader r) {
		CsvReader csvReader = newCsvReader(r);
		Spliterator spliterator = new CsvStringArraySpliterator(csvReader);
		return StreamSupport.stream(spliterator, false);
	}

	public static Stream stream(Reader r, int skip) throws IOException {
		CsvReader csvReader = newCsvReader(r);
		csvReader.skipLines(skip);
		Spliterator spliterator = new CsvStringArraySpliterator(csvReader);
		return StreamSupport.stream(spliterator, false);
	}

	private static class CsvStringArraySpliterator implements Spliterator {
		private final CsvReader reader;

		public CsvStringArraySpliterator(CsvReader csvReader) {
			this.reader = csvReader;
		}

		@Override
		public boolean tryAdvance(Consumer action) {
			try {
				return reader.parseLine(new StringArrayConsumer>((strings) -> action.accept(strings)));
			} catch (IOException e) {
				throw new RuntimeException(e);
			}
		}

		@Override
		public void forEachRemaining(Consumer action) {
			try {
				reader.parseAll(new StringArrayConsumer>((strings) -> action.accept(strings)));
			} catch (IOException e) {
				throw new RuntimeException(e);
			}
		}

		@Override
		public Spliterator trySplit() {
			return null;
		}

		@Override
		public long estimateSize() {
			return Long.MAX_VALUE;
		}

		@Override
		public int characteristics() {
			return Spliterator.ORDERED | Spliterator.NONNULL;
		}
	}

	//IFJAVA8_END


	public static CsvReader newCsvReader(Reader reader) {
		return newCsvReader(DEFAULT, reader);
	}

	public static CsvReader newCsvReader(int bufferSize, Reader reader) {
		return new CsvReader(bufferSize, reader);
	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy