Cod sursa(job #1359634)

Utilizator Raz_Van_BarbascuBarbascu Razvan Raz_Van_Barbascu Data 25 februarie 2015 00:30:39
Problema Convertor Scor 70
Compilator java Status done
Runda rosedu_cdl_2015 Marime 4.6 kb
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
 
interface Printable {
    void printHead(PrintWriter writer);
 
    void printData(PrintWriter writer);
}
 
abstract class Field {
    private String name;
 
    public Field(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public abstract String getVal();
 
    public abstract void setVal(String string);
}
 
class Str_Field extends Field {
 
    private String val;
 
    public Str_Field(String name) {
        super(name);
    }
 
    public Str_Field(String val, String name) {
        super(name);
        this.val = val;
    }
 
    @Override
    public String getVal() {
        return val;
    }
 
    @Override
    public void setVal(String string) {
        int index = string.indexOf('"') + 1;
        val = string.substring(index, string.indexOf('"', index));
    }
}
 
class Num_Field extends Field {
 
    private int val;
 
    public Num_Field(String name) {
        super(name);
    }
 
    public Num_Field(int val, String name) {
        super(name);
        this.val = val;
    }
 
    @Override
    public String getVal() {
        return ((Integer) val).toString();
    }
 
    @Override
    public void setVal(String string) {
        val = Integer.parseInt(string.replaceFirst("[^0-9]+", ""));
    }
 
}
 
class Json implements Printable {
 
    private final ArrayList<Field> fields;
 
    public Json() {
        fields = new ArrayList<>();
    }
 
    void convert(String inputFileName, String outputFileName) {
        PrintWriter writer;
        int index;
        String[] split;
        String[] field;
        try {
            writer = new PrintWriter(outputFileName);
            Scanner reader = new Scanner(new FileInputStream(inputFileName));
            reader = reader.useDelimiter("[{}]");
            String next = reader.next();
            //learning phase
            if (reader.hasNext()) {
                next = reader.next();
                next = next.replace("\r\n", "");
                next = next.trim();
                if (!next.matches("\\s*,*\\s*")) {
                    split = next.split(",");
 
                    for (String s : split) {
                        field = s.split(":");
                        index = field[0].indexOf('"') + 1;
                        String fieldName = field[0].substring(index,
                                field[0].indexOf('"', index));
                        if (field[1].indexOf('"') >= 0) {
                            index = field[1].indexOf('"') + 1;
                            fields.add(new Str_Field(field[1].substring(index,
                                    field[1].indexOf('"', index)), fieldName));
                        } else {
                            fields.add(new Num_Field(Integer.parseInt(field[1]
                                    .replaceAll("[^0-9]+", "")), fieldName));
                        }
                    }
                    printHead(writer);
                    printData(writer);
                }
            }
            //processing phase
            while (reader.hasNext()) {
 
                next = reader.next();
                next = next.replace("\r\n", "");
                next = next.trim();
                index = 0;
                if (!next.matches("\\s*,|]*\\s*")) {
                    split = next.split(",");
 
                    for (String unparsedFields : split) {
                        fields.get(index).setVal(unparsedFields.split(":")[1]);
                        index++;
                    }
                    printData(writer);
                }
            }
            writer.close();
            reader.close();
        } catch (FileNotFoundException e) {
            System.err.println("File is not there!");
        }
    }
 
    @Override
    public void printHead(PrintWriter writer) {
        for (Field field : fields) {
            writer.print(field.getName() + ",");
        }
    }
 
    @Override
    public void printData(PrintWriter writer) {
        writer.println();
        for (Field field : fields) {
            writer.print(field.getVal() + ",");
        }
    }
 
}
 
public class Main {
 
    public static void main(String[] args) {
        Json json = new Json();
        json.convert("convertor.in", "convertor.out");
    }
}