Mercurial > dive4elements > river
view flys-backend/src/main/java/de/intevation/flys/importer/parsers/W80Parser.java @ 4733:e2e615109a2e
Removed superfluous imports.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 30 Dec 2012 10:53:24 +0100 |
parents | 0df1cac6c4b5 |
children | 94b39073f0f7 |
line wrap: on
line source
package de.intevation.flys.importer.parsers; import java.util.ArrayList; import java.util.Map; import java.util.List; import java.util.TreeMap; import java.util.regex.Pattern; import java.io.File; import java.io.IOException; import org.apache.log4j.Logger; import de.intevation.flys.importer.XY; import de.intevation.artifacts.common.utils.FileTools; /** * To create cross-sections, generate: Map<double,list<xy>> from files * in da66 format. */ public class W80Parser extends LineParser implements CrossSectionParser { /** Private logger. */ private static Logger logger = Logger.getLogger(W80Parser.class); /** Regex to match lines of files in da66 format. */ private static final Pattern LINE_PATTERN = Pattern.compile("[\\p{Alnum} ]{20}" + // ID "[0-9 ]{10} " + // GK-right "[0-9 ]{10} " + // GK-left "[0-9 ]{6} " + // date "[0-9 ]{1} " + // kind of exactness of measurement "[0-9 ]{7} " + // height "[0-9 ]{6} " + // date of height "[0-9 ]{1} " + // kind of exactness of height-measurement "[0-9 ]{3} " + // kind (only for NIV-points) "[\\p{Alnum} ]{6} " + // date of point decline "[\\p{Alnum} ]{8} " + // note for point "[0-9 ]{2} " // actuality ); // TODO define headers regex, use regex or remove it. /** The current line to which add points. */ private List<XY> currentLine; /** Data collected so far, last element will be currentLine. */ protected Map<Double, List<XY>> data; /** Trivial constructor. */ public W80Parser() { data = new TreeMap<Double, List<XY>>(); } /** Get the description of the cross section parsed. */ @Override public String getDescription() { return FileTools.removeExtension(getFileName()); } /** Get the year of this cross sections measurement. */ @Override public Integer getYear() { return null; } /** * Return the data parsed. * @return map of stations (km) to list of points. */ @Override public Map<Double, List<XY>> getData() { return data; } public void parseW80s(File root, final Callback callback) { // TODO use the removeExtension/guess description and date. FileTools.walkTree(root, new FileTools.FileVisitor() { @Override public boolean visit(File file) { if (file.isFile() && file.canRead() && file.getName().toLowerCase().endsWith(".w80") && (callback == null || callback.accept(file))) { reset(); try { parse(file); logger.info("parsing done"); if (callback != null) { callback.parsed(W80Parser.this); } } catch (IOException ioe) { logger.error("IOException while parsing file"); return false; } } return true; } }); } /** Called before consuming first line of file. */ public void reset() { data.clear(); currentLine = new ArrayList<XY>(); } /** * Called for each line. Try to extract info from a da66 line. */ @Override protected void handleLine(int lineNum, String line) { String pointId = line.substring(0,20); String gkRight = line.substring(20,30); String gkHigh = line.substring(30,40); String date = line.substring(40,46); String locType = line.substring(46,47); String height = line.substring(47,54); String dateH = line.substring(54,60); String typeH = line.substring(60,61); String kindH = line.substring(61,64); String dateDec = line.substring(64,70); String note = line.substring(70,78); String actual = line.substring(78); } /** Called when file is fully consumed. */ @Override protected void finish() { logger.info("Parsed " + data.size() + " lines"); } /** Parses files given as arguments. */ public static void main(String [] args) { W80Parser parser = new W80Parser(); logger.warn("Start parsing files."); for (String arg: args) { parser.parseW80s(new File(arg), null); logger.warn("Parsing a file."); } logger.error("Finished parsing files."); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :