Cod sursa(job #1354035)

Utilizator stefanf7Stefan Florescu stefanf7 Data 21 februarie 2015 15:38:41
Problema Convertor Scor 0
Compilator java Status done
Runda rosedu_cdl_2015 Marime 4.37 kb

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;


/**
 *   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 buffReader = new BufferedReader(new FileReader("convertor.in"));
        PrintWriter pw = new PrintWriter("convertor.out");
 
        String line = "";
        while(!line.contains("}")) 
            line = line.concat(buffReader.readLine());   
        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(buffReader.readLine())).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)))
                            pw.write(sp[j] + ",");
                        if(countWords == count/2)
                        {
                            pw.write(NLS);
                            countWords = 0;
                        }                           
                    }
            }

        buffReader.close();
        pw.close();
    }
    
    
    public static void main(String[] args) throws IOException
    {
        Main conv = new Main();
        conv.converteste();
    }
}