Cod sursa(job #1361575)

Utilizator petru_ch94Petru C petru_ch94 Data 25 februarie 2015 22:15:59
Problema Convertor Scor 0
Compilator java Status done
Runda rosedu_cdl_2015 Marime 2.99 kb
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.StringTokenizer;
import java.util.Vector;

class Main {
	private static Vector<String> storage;
	private static int mainField = 0;
	private static int query = 0;
	private static String mainFields = "";
	private static String buildLine = "";

	public static void readFromInternFile() throws IOException {
		storage = new Vector<String>();
		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(
					new FileInputStream("convertor.in"), "UTF8"));
			String line;		
			while((line = br.readLine()) != null) {
				processLine(line);
			}
			storage.add(0, mainFields);
			storage.add(buildLine);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			printCSVinFile();
			br.close();
		}
	}

	public static void printCSVinFile() throws FileNotFoundException, UnsupportedEncodingException {
		PrintWriter pw = new PrintWriter("convertor.out","UTF8");
		int size = storage.size();
		for(int j = 0; j < size; j++) {
			pw.print(storage.get(j));
			pw.println();
		}
		pw.close();
	}

	public static void processLine(String line) throws FileNotFoundException, UnsupportedEncodingException {
		StringTokenizer st = new StringTokenizer(line,"\\{|\\}");
		
		while(st.hasMoreElements()) {
			String stringToAdd = st.nextToken();
			if(stringToAdd.contains("[")) {
				query++;
				mainField = 0;
				continue;
			}
			if(stringToAdd.contains("]")) {
				break;
			}
			StringTokenizer stringTokenByQuotes = new StringTokenizer(stringToAdd, "\"");
			while(stringTokenByQuotes.hasMoreElements()) {
				String stringToken = stringTokenByQuotes.nextToken();
				
				StringTokenizer stringTokenByComma = new StringTokenizer(stringToken, ",");
				if(!stringTokenByComma.hasMoreElements()) {continue;}
				stringToken = stringTokenByComma.nextToken();
				if(stringToken.contains(":")) {
					stringToken = stringToken.substring(stringToken.indexOf(':')+1);
				}

				while(stringToken.startsWith(" ")) stringToken = stringToken.substring(1);
				if(stringToken.length() == 0) {
					continue;
				}
				if(mainField != 0) {
					
					if(buildLine.length() == 0) buildLine = stringToken;
					else 
						buildLine += "," + stringToken;
					mainField = 0;
				} else {
					if(mainFields.startsWith(stringToken)) {
						storage.add(buildLine);
						buildLine = "";
						query++;
						mainField = query;
						continue;
					}
					if(mainFields.contains(stringToken)) {
						mainField = query;
						continue;
					}
					if(mainFields.length() == 0) mainFields = stringToken;
					else
						mainFields += "," + stringToken;
					mainField = query;
				}
			}
		}
	}

	public static void main(String[] args) throws IOException {
		readFromInternFile();
	}
}