import java.io.*;
import java.util.*;

public class hw{
    //added for the contest
    private static String feature;
    private static String label;
    private static String svmlight;
    private static boolean istraining;

	private static int num_pos=0;
	private static int num_neg=0;

	public static void main(String[] args){
	    if(args.length<=0){
		System.out.println("Usage: java hw <type> <feature file> [label file] <svmlight>");
		System.exit(0);
	    }
	    else{
	         String type=args[0];
		 if(type.equals("-train") && args.length==4){
		     feature=args[1];
		     label=args[2];
		     svmlight=args[3];
		     istraining=true;
		 }
		 else if(type.equals("-test") && args.length==3){
		     feature=args[1];
		     svmlight=args[2];
		     istraining=false;	
		 }
		 else{
		     System.out.println("Usage: java hw <type> <feature file> [label file] <svmlight>");
		     System.exit(0);
		 }
	    }
	    transfer();
	    //System.out.println(num_pos+" "+num_neg);	
		//	cv();
	}
	
	public static void cv(){
		Vector pos=new Vector();
		Vector neg=new Vector();
		try{
			BufferedReader in=new BufferedReader(new FileReader("pos_data"));
			while(true){
				String curline=in.readLine();
				if(curline==null) break;
				pos.add(curline);
			}
			in=new BufferedReader(new FileReader("neg_data"));
			while(true){
				String curline=in.readLine();
				if(curline==null) break;
				neg.add(curline);
			}
			Collections.shuffle(pos);
			Collections.shuffle(neg);
			int possize=num_pos/10;
			int negsize=num_neg/10;
			System.out.println(possize+" "+negsize);
			for(int i=0; i<10; i++){
				PrintWriter out1=new PrintWriter(new FileWriter("test_"+i));
				PrintWriter out2=new PrintWriter(new FileWriter("training_"+i));
				for(int k=0; k<pos.size(); k++){
					if (k>=i*possize && k<(i+1)*possize)
						out1.println((String)pos.elementAt(k));
					else 
						out2.println((String)pos.elementAt(k));
				}
				for(int k=0; k<neg.size(); k++){
					if (k>=i*negsize && k<(i+1)*negsize)
						out1.println((String)neg.elementAt(k));
					else
						out2.println((String)neg.elementAt(k));
				}
				out1.close();
				out2.close();
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static void transfer(){
	    BufferedReader fvalue=null;
	    BufferedReader lvalue=null;
       
	    try{
		fvalue=new BufferedReader(new FileReader(feature));
		if(istraining){
		    lvalue=new BufferedReader(new FileReader(label));
		}
	
		PrintStream out=new PrintStream(new FileOutputStream(svmlight));

		while(true){
		    String curfeatureLine=fvalue.readLine();
		    if(curfeatureLine==null) break;
		    //System.out.println("current line:");
		    //System.out.println(curfeatureLine);
		    String[] tokens=curfeatureLine.split("\\t");
		    //System.out.println("number of features:"+tokens.length);
		    int f_id=0;
		    String l;
		    if(istraining && lvalue!=null)
			l=lvalue.readLine();
		    else l="0";
		    out.print(l+" ");

		    for(int i=0; i<tokens.length; i++){
			//System.out.println(tokens[i]);
			f_id++;
			Float f=new Float(tokens[i]);
			out.print(f_id+":"+f.floatValue()+" ");
		    }
		    out.println();
		}
		fvalue.close();
		if(lvalue!=null)lvalue.close();
		out.close();
	
	    }catch(Exception e){
		e.printStackTrace();
	    }
	}
}
