Cod sursa(job #1345068)

Utilizator mihaitza22Mihai Nan mihaitza22 Data 17 februarie 2015 11:14:53
Problema Convertor Scor 0
Compilator java Status done
Runda rosedu_cdl_2015 Marime 4.76 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.Scanner;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.Vector;

/**
 *
 * @author Nan Mihai
 */
public class Convertor {
    private String name;
    private HashMap<String, Vector<String>> dictionar;
    
    public Convertor() {
        dictionar = new HashMap<String, Vector<String>>();
    }
    
    public static void main(String args[]) throws FileNotFoundException {
        Convertor c = new Convertor();
        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;
            System.out.println(line);
        }
        StringTokenizer st = new StringTokenizer(text, ":");
        Vector<String> lines = new Vector<String>();
        while(st.hasMoreTokens()) {
            String aux = st.nextToken();
            lines.add(aux);
        }
        for(String aux : lines) {
            key = getKey(aux);
            int index = lines.indexOf(aux);
            String next = "";
            if(index < lines.size() - 1) {
                next = lines.elementAt(index+1); 
            }
            value = getValue(next);
            if(!key.equals("") && !value.equals("")) {
                if(dictionar.containsKey(key)) {
                    Vector<String> v = dictionar.get(key);
                    v.add(value);
                } else {
                    Vector<String> v = new Vector<String>();
                    v.add(value);
                    dictionar.put(key, v);
                }
            }
        }
        reader.close();
    }
    
    public String getKey(String s) {
        String key = "";
        String pref = "";
        char c = '"';
        pref += c;
        if(s.startsWith("[ { ")) {
            StringTokenizer st = new StringTokenizer(s, pref);
            String aux = st.nextToken();
            key = st.nextToken();
        } else if(s.contains(",")) {
            StringTokenizer st = new StringTokenizer(s, ",");
            String aux = st.nextToken();
            aux = st.nextToken();
            st = new StringTokenizer(aux, pref);
            aux = st.nextToken();
            key = st.nextToken();
        }
        return key;
    }
    
    public String getValue(String s) {
        String value = "";
        if(!s.equals("")) {
            int i = 0;
            char ch;
            ch = s.charAt(0);
            while(ch == ' ') {
                i++;
                ch = s.charAt(i);
            }
            char c = s.charAt(i);
            if(c == '"') {
                String prefix = "";
                prefix += c;
                StringTokenizer st = new StringTokenizer(s, prefix);
                String aux = st.nextToken();
                value = st.nextToken();
            } else {
                StringTokenizer st = new StringTokenizer(s, " ,");
                value = st.nextToken();
            }
        }
        return value;
    }
    
    public void write(String namefile) throws FileNotFoundException {
        PrintWriter writer = new PrintWriter(namefile);
        Collection<Vector<String>> vect_values = new ArrayList<Vector<String>>();
        Set<String> keys = dictionar.keySet();
        vect_values = dictionar.values();
        int i = 0, j = 0, nr = 0;
        for(String key : keys) {
            writer.write(key + ",");
        }
        writer.write("\n");
        Iterator itr = vect_values.iterator();
        if(itr.hasNext()) {
            Vector<String> values = (Vector<String>) itr.next();
            nr = values.size();
        }
        itr = vect_values.iterator();
        for(int k = 0; k < nr; k++) {
            for(i = 0; i <= keys.size(); i++) {
                j = 0;
                for(Vector<String> vect : vect_values) {
                    j++;
                    if(j == i) {
                        String value = vect.elementAt(k);
                        writer.write(value + ",");
                    }
                }
            }
            writer.write("\n");
        }
        writer.close();
    }
}