package org.xmlsh.util.commands; import org.xmlsh.util.Util; /** * Parses lines with fixed width format into CSVRecord format * * @author David A. Lee * @version $Revision$ */ public class FixedParser { private ColSpec mColspecs[]; private boolean bNormalize; private static class ColSpec { int start ; int end ; ColSpec( int start , int end ){ this.start = start ; this.end = end ; } ColSpec( String spec ) { String pair[] = spec.split("-"); start = Util.parseInt(pair[0],0); end = pair.length > 1 ? Util.parseInt(pair[1],0) : 0 ; } }; public FixedParser( String colspecs[] , boolean normalize ) { bNormalize = normalize; mColspecs = new ColSpec[colspecs.length]; int i = 0; for( String spec : colspecs ) mColspecs[i++] = new ColSpec( spec ); } /** * Parse a single line into String[] each string is 1 csv field */ public CSVRecord parseLine( String line ){ String[] list = new String[ mColspecs.length]; int col = 0; for( ColSpec spec : mColspecs ){ int start = spec.start - 1; int end = spec.end ; if( start < 0 ) start =0; // Line shorter then start position if( start >= line.length() ) break ; if( end <= 0 || end > line.length() ) end = line.length(); String field = line.substring(start , end ); if( bNormalize ) field = field.trim(); list[col++] = field ; } return new CSVRecord( list ); } } // // //Copyright (C) 2008-2014 David A. Lee. // //The contents of this file are subject to the "Simplified BSD License" (the "License"); //you may not use this file except in compliance with the License. You may obtain a copy of the //License at http://www.opensource.org/licenses/bsd-license.php // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. //See the License for the specific language governing rights and limitations under the License. // //The Original Code is: all this file. // //The Initial Developer of the Original Code is David A. Lee // //Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved. // //Contributor(s): none. //