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

/**
 * Practice file i/o with an application that reads lines from a file 
 * containing three integers and writing them to an output file.
 **/

public class FilePlay2
{
    /**
     * The main function for the program described for this class.
     **/
    public static void main (String [] Args)
    {
        final String FORMAT_TOKEN = "Token: %s\n";
        final String FORMAT_COUNT = "Count: %d for line \"%s\".\n";

        String      inFileName = "tester.txt";
        String      outFileName = "good-out.txt";
        String      errFileName = "bad-out.txt";    // Not used in Part 2
        Scanner     inStream;
        Scanner     lineStream;                     // Not used in Part 2
        PrintWriter outStream;
        PrintWriter errStream;                      // Not used in part 2
        String      line;
        String      token;                          // Not used in Part 2
        int         tokenCount;                     // Not used in Part 2
        int         number;                         // Not used in Part 2

        //---------------------------------------------------------
        inStream = Util1.newScanner(new File(inFileName));
        if (inStream == null)
        {
            System.err.printf("Could not open %s for reading.\n%s\n",
             inFileName, Util1.getErrorMessage());
            System.exit(1);
        }
        //---------------------------------------------------------
        try
        {
            outStream = new PrintWriter(new File(outFileName));
        }
        catch (Exception ee)
        {
            outStream = null;
            System.err.printf("Could not open %s for writing.\n%s\n",
             outFileName, ee.toString());
            System.exit(1);
        }
        //---------------------------------------------------------

      /* Part 2
         // continue until EOF
         while (inStream.hasNext())
         {
            line = inStream.nextLine();
            outStream.println(line);
            System.out.println(line);
         }
         
         // be sure to flush the outStream buffer
         outStream.flush();
       */
       /* Part 3
         // continue until EOF
         while (inStream.hasNext())
         {
            line = inStream.nextLine();
            outStream.println(line);
            
            lineStream = new Scanner(line);
            lineStream.useDelimiter(",");
            
            tokenCount = 0;
            
            while (lineStream.hasNext())
            {
               token = lineStream.next();
               tokenCount++;
               System.out.printf("Token:%s\n", token);
            }
            System.out.printf("Count:%d for line \"%s\".\n", tokenCount, line);
         }
         */
                // Part 4
                
         errStream = Util1.newPrintWriter(new File(errFileName));
         
         // continue until EOF
         while (inStream.hasNext())
         {
            line = inStream.nextLine();

            
            lineStream = new Scanner(line);
            lineStream.useDelimiter(",");
            
            tokenCount = 0;
            
            while (lineStream.hasNextInt())
            {
               number = lineStream.nextInt();
               tokenCount++;
            }
            System.out.printf("Count:%d for line \"%s\".\n", tokenCount, line);
            
            if(tokenCount == 3)
               outStream.println(line);
            else
               errStream.println(line);  
         }
         
         // be sure to flush the outStream buffer
         outStream.flush();
         errStream.flush();
       
        
    }
}
