Pagini recente » Cod sursa (job #2346091) | Cod sursa (job #2570663) | Cod sursa (job #3130256) | Cod sursa (job #875955) | Cod sursa (job #1359673)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import org.omg.CORBA.FREE_MEM;
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 String 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 String setVal(String string) {
int index = string.indexOf('"') + 1;
val = string.substring(index, string.indexOf('"', index));
return val;
}
}
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 String setVal(String string) {
val = Integer.parseInt(string.replaceFirst("[^0-9]+", ""));
return ((Integer) val).toString();
}
}
class Json implements Printable {
private final ArrayList<Field> fields;
int size;
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));
}
}
size=fields.size();
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*") && !next.equals("]")) {
split = next.split(",");
for (String unparsedFields : split) {
buffer+= fields.get(index).setVal(unparsedFields.split(":")[1])+",";
index++;
}
next="";
//printData(writer);
//inline FTW
writer.println();
writer.print(buffer);
buffer = "";
}
}
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() + ",");
}
}
String buffer="";
@Override
public void printData(PrintWriter writer) {
writer.println();
buffer="";
for (int i=0;i< size;i++) {
buffer+=fields.get(i).getVal() + ",";
}
writer.print(buffer);
}
}
public class Main {
public static void main(String[] args) {
Json json = new Json();
json.convert("convertor.in", "convertor.out");
}
}