diff --git a/src/main/java/com/epam/parso/SasFileReader.java b/src/main/java/com/epam/parso/SasFileReader.java index 3b43673..fae3650 100644 --- a/src/main/java/com/epam/parso/SasFileReader.java +++ b/src/main/java/com/epam/parso/SasFileReader.java @@ -84,4 +84,11 @@ public interface SasFileReader { * @return the object of the {@link SasFileProperties} class that stores file metadata. */ SasFileProperties getSasFileProperties(); + + /** + * The function to return the index of the current row when reading the sas7bdat file. + * + * @return current row index + */ + Integer getOffset(); } diff --git a/src/main/java/com/epam/parso/impl/SasFileConstants.java b/src/main/java/com/epam/parso/impl/SasFileConstants.java index 4bfe7e0..93eef05 100644 --- a/src/main/java/com/epam/parso/impl/SasFileConstants.java +++ b/src/main/java/com/epam/parso/impl/SasFileConstants.java @@ -19,6 +19,9 @@ package com.epam.parso.impl; +import java.awt.List; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -1016,4 +1019,18 @@ public interface SasFileConstants { */ int START_DATES_SECONDS_DIFFERENCE = SECONDS_IN_MINUTE * MINUTES_IN_HOUR * HOURS_IN_DAY * START_DATES_DAYS_DIFFERENCE; + + java.util.List DATE_TIME_FORMAT_STRINGS = (java.util.List) Arrays.asList("DATETIME", "DATETIME7","DATETIME8", + "DATETIME9", "DATETIME10","DATETIME11","DATETIME12","DATETIME13","DATETIME14", + "DATETIME15","DATETIME16","DATETIME17","DATETIME18","DATETIME18.1","DATETIME19", + "DATETIME20.1","DATETIME21.2","DATETIME22.3", + "DATETIME.", "DATETIME7.","DATETIME8.", + "DATETIME9.", "DATETIME10.","DATETIME11.","DATETIME12.","DATETIME13.","DATETIME14.", + "DATETIME15.","DATETIME16.","DATETIME17.","DATETIME18.","DATETIME19." + ); + + java.util.List DATE_FORMAT_STRINGS = (java.util.List) Arrays.asList("DATE5", "DATE6","DATE7", "DATE8","DATE9","DATE11", + "DATE5.", "DATE6.","DATE7.", "DATE8.","DATE9.","DATE11."); + } + diff --git a/src/main/java/com/epam/parso/impl/SasFileParser.java b/src/main/java/com/epam/parso/impl/SasFileParser.java index 2c2022a..8cc502c 100644 --- a/src/main/java/com/epam/parso/impl/SasFileParser.java +++ b/src/main/java/com/epam/parso/impl/SasFileParser.java @@ -33,13 +33,16 @@ import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.TimeZone; import static com.epam.parso.impl.DateTimeConstants.DATETIME_FORMAT_STRINGS; import static com.epam.parso.impl.DateTimeConstants.DATE_FORMAT_STRINGS; @@ -571,7 +574,16 @@ public Object[] readNext(List columnNames) throws IOException { } return Arrays.copyOf(currentRow, currentRow.length); } - + + /** + * offset getter. + * + * @return current offset. + */ + Integer getOffset() { + return currentRowInFileIndex; + } + /** * The method to read next page from sas7bdat file and put it into {@link SasFileParser#cachedPage}. If this page * has {@link SasFileConstants#PAGE_META_TYPE_1} or {@link SasFileConstants#PAGE_META_TYPE_2} type method process @@ -719,43 +731,152 @@ private Object[] processByteArrayWithData(long rowOffset, long rowLength, List columnNames) throws IOException { return sasFileParser.readNext(columnNames); } + /** + * The function to return the index of the current row when reading the file sas7bdat file. + * + * @return current row index + */ + @Override + public Integer getOffset() { + return sasFileParser.getOffset(); + } /** * The function to get sas file properties.