public String parse(String line) {
	    	logger.info("Parser:" + line);
	    	row++;
	    	Map<Integer,Object> map = new Hashtable<>(simpleFormat.getColumns().size());	    	
	    	String part = "";    	    
	    	for(Column c:simpleFormat.getColumns()){
	    		try {
	    			part = line.substring(c.getBeginIndex(), c.getEndIndex()).trim();
	    			if (part.length() > 0){	
	    				Object o = c.parseValue(part);
						map.put(c.getNum(),o);		
						setColumnMinMax(c.getNum(), (Date)map.get(0));  // First row contains date 
						setColumnLast(c.getNum(), (Date)map.get(0));
					}	    			
	    		} catch (NumberFormatException | ParseException | IndexOutOfBoundsException e) {
	    				errors++;
						logger.warn(String.format("Parser error in row:%d for column with num %d. Line part:%s Exception:%s",row, c.getNum(),part,e.getMessage()));
				}		    			    		
	    	}	    	
	    	StringBuffer b = new StringBuffer(200);
	    	for(int i=0; i<simpleFormat.getColumns().size();i++){
	    		Column c = simpleFormat.getColumns().get(i);
	    		if (i!=0) b.append(",");
	    		if (map.containsKey(i)){
	    			if (c.getType().equalsIgnoreCase("date")){
	    				Date d = (Date)map.get(i);	    				
	    				b.append(dateFormatter.format(d));
	    			} else {
	    				b.append(map.get(i));	
	    			}	    			
	    		} 	    			    		
	    	}	    	
	        return b.toString();
	    }