All pastes #351533 Raw Edit

Mine

public text v1 · immutable
·published 2007-02-12 06:14 UTC
rendered paste body
/*******************************************************
 * ManipulateDataDriver
 * This program drives the ManipulateData class.  It
 * calls methods from it that will make the program
 * read data from a file and sort it into different 
 * arrays according to the data type.
 ******************************************************/
 
 public class ManipulateDataDriver
 {
 	/**
 	 * main
 	 * This method calls other methods from the ManipulateData
 	 * class and runs the whole program.
 	 *
 	 * @param args unused
 	 */
 	public static void main(String[] args)
 	{
 		System.out.println("Welcome to the ManipulateData program.\nThis Program will ask "
 			+ "you for a file to get input from, and two files to print output to.\nIt will "
 			+ "echo the data it reads in from the file to the screen, and add the data to "
			+ "one \n"
 			+ "of two arrays depending on it's data type.  The data in the arrays will be \n"
 			+ "output to the two text files with the label \"Unsorted\" , and then the two "
			+ "arrays \n"
 			+ "will be sorted (lexicographically for Strings, numerically for integers) \n"
 			+ "and added to  the two different text files with the label \"Sorted\", whose "
			+ "names will \nbe specified by you.\n");
 			
 		ManipulateData myManipulateData;
 		
		// Instantiate a ManipulateData object, which runs the constructor
 		myManipulateData = new ManipulateData();
 			
 		System.out.println("The program has ended normally.");
 	}
 }



import java.util.Scanner;
import java.io.*;
/**********************************************************
 * ManipulateData.java
 * This program reads in a filename from the user, and 
 * reads data from a file which it stores in an array
 * according to what type of data it is.
 *********************************************************/
 
 public class ManipulateData
 {
 	Scanner fileScanner, keyboard;
 	PrintWriter intOutfile, strOutfile;
 	
 	private int numInt, numStr;
	private String input, outStr, outInt;
 	private String[] myStrings;
 	private int[] myInts;
 	
 	/**
 	 * ManipulateData
 	 * This method is the constructor method for the class.
 	 */
 	public ManipulateData()
 	{
 		keyboard = new Scanner(System.in);
 		
 		myStrings = new String[100];
 		myInts = new int[50];
 		
 		// Call the methods to run the program from the constructor	
		setFileScanner();
 		setOutfiles();
 		readData();
 		writeArray(false);
 		sortStringArray();
 		sortIntArray();
 		writeArray(true);
		remindUser();
		
		// Close both output files 		
 		strOutfile.close();
 		intOutfile.close();	
 	}
 	
 	/**
 	 * setFileScanner
 	 * This method initializes the file scanner to get input from the
 	 * file specified by the user.  It checks to make sure the file
 	 * exists and loops until it gets a valid filename.
 	 */
 	public void setFileScanner()
 	{
 		String file;
		file = null;
 		boolean isValid;
 		
 		// Initialize isValid to false so that the loop will run initially, and initialize
 		// fileScanner to null to avoid the "may not have been initialized" error
 		isValid = false;
 		//fileScanner = null;
		
		// Loop until the user enters a valid filename for file input
		while(!isValid)
		{
			System.out.print("Enter the file name with path included of the input file: ");
			file = keyboard.nextLine();
			System.out.println("You entered the file for input: " + file);
											
			// Attempt to open the input file using Scanner
			try
			{
				fileScanner = new Scanner(new File(file));
				isValid = true;
			}
			catch(FileNotFoundException fnfe)
			{
				System.out.println("File not found.");
				isValid = false;
			}
		}
		
		// Put filename in input
		input = file;
 		
 		// Tell fileScanner to use other delimiters rather than the default
 		fileScanner.useDelimiter("[-\n.,?:;%$]");
 	}
 	
 	/**
 	 * setOutfiles
 	 * This method sets the two output files that the user wants to output the 
 	 * String and integer data to.
 	 */
 	public void setOutfiles()
 	{
 		String file;
 		 		
 		System.out.print("\nEnter the file name of the String output file: ");
		file = keyboard.nextLine();
		System.out.println("You entered the file for String output: " + file);
			
		// Try to open a file to print output to for the Strings
		try
		{
			strOutfile = new PrintWriter(file);
		}
		catch(IOException ioe)
		{
			System.out.println("Could not open file for writing.");
		}
		
		// Put filename in outStr
		outStr = file;
		
		System.out.print("\nEnter the file name of the integer output file: ");
		file = keyboard.nextLine();
		System.out.println("You entered the file for integer output: " + file);
		
			
		// Try to open a file to print output to for the integers
		try
		{
			intOutfile = new PrintWriter(file);
		}
		catch(IOException ioe)
		{
			System.out.println("Could not open file for writing.");
		}
		
		// Put filename in outInt
		outInt = file;	
 	}
 	
 	/**
 	 * readData
 	 * This method reads in the data from the file and stores it either in
 	 * the String array or the integer array.
 	 */
 	public void readData()
 	{
 		String temp;
 		
 		System.out.println("\nData from file: ");
 		
 		// While there is data in the file, loop and store it into the
 		// correct array, while incrementing the number of elements that
 		// are in the array.  Echo the data from the file to the screen also. 		
 		while(fileScanner.hasNext())
 		{
 			if(fileScanner.hasNextInt())
 			{
 				myInts[numInt] = fileScanner.nextInt();
 				System.out.println("Integer: " + myInts[numInt]);
 				
 				numInt++; 				
 			}
 			else
 			{
				temp = fileScanner.next();
				
				if(!temp.equals(""))
				{
					myStrings[numStr] = temp;
 					
					System.out.println("String: " + myStrings[numStr]);
 				
 					numStr++;
				}
 			}
 		}
 	}
 	
 	/**
 	 * writeArray
 	 * This method writes two arrays to the files specified by the user.
 	 *
 	 * @param sorted			true if array is sorted, false if unsorted
 	 */
 	public void writeArray(boolean sorted)
 	{
 		// Print the correct header whether the array is sorted or unsorted
 		if(sorted)
 		{
 			strOutfile.println("******Sorted******");
 			intOutfile.println("******Sorted******");
 		}
 		else
 		{
 			strOutfile.println("******Unsorted******");
 			intOutfile.println("******Unsorted******");	
 		}
 		
 		// Loop until every String array element has been written to the string
 		// text file.
 		for(int i = 0; i < numStr; i++)
 		{
 			strOutfile.println(myStrings[i]);
 		}
 		
 		// Loop until every integer array element has been written to the integer
 		// text file
 		for(int i = 0; i < numInt; i++)
 		{
 			intOutfile.println(myInts[i]);
 		}
 	}
 	
 	/**
 	 * sortStringArray
 	 * This method sorts an array of strings lexicographically in ascending
 	 * order
 	 */
 	public void sortStringArray()
 	{
 		// Sort the Strings using the selection sort algortithm with compareTo()	
		int startScan, index, minIndex; 
 		String minValue;
 		
 		for(startScan = 0; startScan < (numStr - 1); startScan++) 
 		{
 			minIndex = startScan;
 			minValue = myStrings[startScan];
 			for(index = startScan + 1; index < numStr; index++)
 			{
 				if(myStrings[index].compareTo(minValue) < 0)
 				{
 					minValue = myStrings[index];
 					minIndex = index;
 				}
 			}
 			myStrings[minIndex] = myStrings[startScan];
 			myStrings[startScan] = minValue;
 		}
 	}
 	
 	public void sortIntArray()
 	{
 		// Sort the integers using the selection sort algorithm
 		int startScan, index, minIndex, minValue;
 		
 		for(startScan = 0; startScan < (numInt - 1); startScan++) 
 		{
 			minIndex = startScan;
 			minValue = myInts[startScan];
 			for(index = startScan + 1; index < numInt; index++)
 			{
 				if(myInts[index] < minValue)
 				{
 					minValue = myInts[index];
 					minIndex = index;
 				}
 			}
 			myInts[minIndex] = myInts[startScan];
 			myInts[startScan] = minValue;
 		}
 		
 		
 		// Create a temporary array for use in reversing the sorted array
 		int[] tempArray;
 		tempArray = new int[numInt];
 		
 		// Reverse the array to put the integers in descending order
 		for(int i = 0; i < numInt; i++)
 			tempArray[i] = myInts[i];
 		
 		for(int i = 0; i < numInt; i++)
 		{
 			myInts[i] = tempArray[(numInt - 1) - i];
 		} 		
 	}
	
	/**
	 * remindUser
	 * This method reminds the user where the input and output files are
	 */
	 public void remindUser()
	 {
	 	System.out.println("\nThe input file is located at: " + input);
		System.out.println("The String output file is located at: " + outStr);
		System.out.println("The integer output file is lcoated at: " + outInt);
	 }	 
}