Cod sursa(job #1345430)

Utilizator mihaitza22Mihai Nan mihaitza22 Data 17 februarie 2015 16:46:02
Problema Convertor Scor 0
Compilator java Status done
Runda rosedu_cdl_2015 Marime 3.72 kb
/*
 * Realizat pentru inscrierea la CDL
 * Nan Mihai - Facultatea de Automatica si Calculatoare
 * Grupa - 324CC
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.Vector;
import java.lang.Object;

/**
 *
 * @author Nan Mihai
 */
public class Main {
    private String name;
    private LinkedHashMap<String, Vector<String>> dictionar;
    private int nrE = 0;
    
    public Main() {
        dictionar = new LinkedHashMap<String, Vector<String>>();
    }
    
    public static void main(String args[]) throws FileNotFoundException {
        Main c = new Main();
        c.read("convertor.in");
        c.write("convertor.out");
    }
    
    public void read(String namefile) throws FileNotFoundException {
        Scanner reader = new Scanner(new FileInputStream(namefile));
        String text = "";
        String line, key, value;
        while(reader.hasNext()) {
            line = reader.nextLine();
            text += line;
        }
        StringTokenizer st = new StringTokenizer(text, ",");
        while(st.hasMoreTokens()) {
            String aux = st.nextToken();
            key = getKey(aux);
            value = getValue(aux);
            if(dictionar.containsKey(key)) {
                Vector<String> v = dictionar.get(key);
                v.add(value);
                if(v.size() > nrE) {
                    nrE = v.size();
                }
            } else {
                Vector<String> v = new Vector<String>();
                v.add(value);
                dictionar.put(key, v);
                nrE = 1;
            }
        }
        reader.close();
    }
    
    public String getKey(String s) {
        String key = "", aux = "";
        String pref = "";
        char c = '"';
        pref += c;
        StringTokenizer st = new StringTokenizer(s, ":");
        aux = st.nextToken();
        st = new StringTokenizer(aux, pref);
        aux = st.nextToken();
        if(aux.contains("{")) {
            key = st.nextToken();
        } else {
            key = aux;
        }
        return key;
    }
    
    public String getValue(String s) {
        String value = "", aux = "";
        String pref = "";
        char c = '"';
        pref += c;
        StringTokenizer st = new StringTokenizer(s, ":");
        aux = st.nextToken();
        aux = st.nextToken();
        st = new StringTokenizer(aux, pref);
        aux = st.nextToken();
        if(aux.equals(" ")) {
            value = st.nextToken();
        } else {
            value = aux;
        }
        if(value.startsWith(" ")) {
            value = value.replaceFirst(" ", "");
        }
        return value;
    }
    
    public void write(String namefile) throws FileNotFoundException {
        PrintWriter writer = new PrintWriter(namefile);
        for(String key : dictionar.keySet()) {
            writer.write(key + ",");
        }
        writer.write("\n");
        int i;
        String line = "";
        for(i = 0; i < nrE; i++) {
            line = "";
            for(Vector<String> values : dictionar.values()) {
                line += values.elementAt(i) + ",";
            }
            if(i != nrE - 1)
                writer.write(line + "\n");
            else 
                writer.write(line);
        }
        writer.close();
    }
}