Pagini recente » Istoria paginii runda/olimpiada1/clasament | Cod sursa (job #1123736) | Cod sursa (job #2436463) | Istoria paginii runda/summer_camp_1/clasament | Cod sursa (job #1354054)
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* Pentru cheile si valorile de la inceputul fisierului pana la prima acolada inchisa } folosesc o metoda de conversie(liniile 25-51),
* dupa care pentru restul valorilor folosesc o alta metoda(liniile 59-98).
* @author Stefan Florescu
*/
public class Main
{
public void converteste() throws FileNotFoundException, IOException
{
//BufferedReader scan = new BufferedReader(new FileReader("convertor.in"));
Scanner scan = new Scanner(new FileReader("convertor.in"));
PrintWriter pw = new PrintWriter("convertor.out");
String line = "";
while(!line.contains("}"))
line = line.concat(scan.nextLine());
int index = line.lastIndexOf("}");
String endLine = line.substring(index); // endLine va fi sirul de la prima aparitie a { pana la primul new line
line = line.substring(0,index); // line va fi tot sirul de la inceputul fisierului pana la prima aparitie a acoladei }
String lineSplit[] = line.split(",|:|\"");
int count = 0; // contorul in functie de care voi stii care sunt cheile si care sunt valorile
String secondLine = "";
for(int i = 1; i < lineSplit.length; i++) // pentru cheile si valoriile ce vor fi scrise pe primele 2 randuri in fisierul de iesire
if(lineSplit[i].length() > 0 && !lineSplit[i].equals(" "))
{
count++;
if(count %2 != 1) // e valoare
{ // concateneaz valoarea intr un string, si adaug string ul la sfarsitul forului in fisierul de iesire
if(lineSplit[i].charAt(0) == ' ')
lineSplit[i] = lineSplit[i].replaceFirst(" ", "");
if(lineSplit[i].length() > 0 )
secondLine += lineSplit[i] + ",";
}
else // e cheie
{
if(Character.isLetterOrDigit(lineSplit[i].charAt(0)))
pw.write(lineSplit[i] + ",");
}
}
String NLS = System.getProperty("line.separator");
pw.write(NLS);
pw.write(secondLine);
pw.write(NLS);
line = endLine;
while((line = line.concat(scan.nextLine())).equals(endLine) == false) // pentru restul cheilor si valorilor din fisier
{
if(line.contains("]"))
break;
endLine = line;
}
lineSplit = line.split(":|,");
for(int i = 0; i < lineSplit.length; i++)
{
if(lineSplit[i].length() > 0 && lineSplit[i].charAt(0) == ' ')
lineSplit[i] = lineSplit[i].replaceFirst(" ", "");
if(lineSplit[i].length() > 0)
{
int a = lineSplit[i].indexOf("\"");
int b = lineSplit[i].lastIndexOf("\"");
if(a != -1 && b != -1)
lineSplit[i] = lineSplit[i].substring(a+1, b);
}
}
// }
int countWords = 0; // acest contor este folosit pentru a stii cand trebuie sarit in fisierul de iesire la linie noua
for(int i = 0; i < lineSplit.length; i++)
if(i%2 == 0) // daca e valoare(nici o legatura cu manelele)
{
String sp[] = lineSplit[i].split("}");
for(int j = 0; j < sp.length; j++)
if(sp[j].length() > 0 && !sp[j].equals("]"))
{
countWords++;
if(sp[j].length() > 0 && sp[j].charAt(0) == ' ')
sp[j] = sp[j].replaceFirst(" ", "");
if(Character.isLetterOrDigit(sp[j].charAt(0)) && sp[j].length() > 0)
{
if(countWords == count/2)
{
pw.println(sp[j] + ",");
countWords = 0;
}
else
pw.print(sp[j] + ",");
}
/* if(countWords == count/2 && j != sp.length-1)
{
pw.write(NLS);
countWords = 0;
} */
}
}
scan.close();
pw.close();
}
public static void main(String[] args) throws IOException
{
Main conv = new Main();
conv.converteste();
}
}