Cod sursa(job #1354947)

Utilizator petru_ch94Petru C petru_ch94 Data 22 februarie 2015 11:12:05
Problema Convertor Scor 40
Compilator java Status done
Runda rosedu_cdl_2015 Marime 3.03 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.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

class Main {
	private static List<ArrayList<String>> storage;
	private static int mainField = 0;
	private static int query = 0;

	public Main() {
		storage = new ArrayList<ArrayList<String>>();
	}

	public static void readFromInternFile() throws IOException {
		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(
					new FileInputStream("convertor.in"), "UTF8"));
			String line;// = br.readLine();

			//	if(line != null) processLine(line);			
			while((line = br.readLine()) != null) {
				processLine(line);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			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++) {
			for(int k = 0; k < storage.get(j).size(); k++) {
				pw.print(storage.get(j).get(k) + ",");
			}
			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("[")) {
				storage.add(new ArrayList<String>());
				storage.add(new ArrayList<String>());
				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) {
					storage.get(mainField).add(stringToken);
					mainField = 0;
				} else {
					if(storage.get(0).indexOf(stringToken) == 0) {
						query++;
						mainField = query;
						storage.add(new ArrayList<String>());
						continue;
					}
					if(storage.get(0).contains(stringToken)) {
						mainField = query;
						continue;
					}
					storage.get(0).add(stringToken);
					mainField = query;
				}
			}
		}
		printCSVinFile();
	}

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