computer science homework

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.StringTokenizer; /** * Read a .dat file and reverse it.

* CPS 350 */ public class Reverse { public static void main(String[]args) { if (args.length != 3) { System.err.println(" Incorrect number of arguments"); System.err.println(" Usage: "); System.err.

println("\tjava Reverse "); System.exit(1); } boolean useList = true; if (args[0].compareTo("list")==0) useList = true; else if (args[0].compareTo("array")==0) useList = false; else { System.err.println("\tSaw "+args[0]+" instead of list or array as first argument"); System.exit(1); } try { // // Set up the input file to read, and the output file to write to // BufferedReader fileIn = new BufferedReader(new FileReader(args[1])); PrintWriter fileOut = new PrintWriter(new BufferedWriter(new FileWriter(args[2]))); // // Read the first line of the .dat file to get sample rate.

// We want to store the sample rate value in a variable, // but we can ignore the "; Sample Rate" part of the line.

// Step through the first line one token (word) at a time // using the StringTokenizer. The fourth token is the one // we want (the sample rate).

// StringTokenizer str; String oneLine; int sampleRate; String strJunk; oneLine = fileIn.readLine(); str = new StringTokenizer(oneLine); strJunk = str.nextToken(); // Read in semicolon strJunk = str.nextToken(); // Read in "Sample" strJunk = str.nextToken(); // Read in "Rate" // Read in sample rate sampleRate = Integer.parseInt(str.nextToken()); // // Read in the remainder of the file on line at a time.

// The values in the first column are thrown away.

// Place values from the second column on the stack.

// Stop reading if we reach the end of the file.

// DStack s; if (useList) s = new ListStack(); else s = new ArrayStack(); String timestep; double data; int count = 0; while ((oneLine = fileIn.readLine()) != null) { if (oneLine.charAt(0) == ';') { continue; } str = new StringTokenizer(oneLine); // Read in time step value from first column timestep = str.nextToken(); // Read in data value from second column data = Double.parseDouble(str.nextToken()); s.push(data); count++; } System.out.println(count+" samples in file"); // // Print the data values to output .dat file.

// First, output the header line:

// "; Sample Rate " // fileOut.println("; Sample Rate " + sampleRate); // Since the first column consists of numbers which start // at 0 and increase by 1/sampleRate every time slice, we'll // just use numSteps to recalculate these numbers.

int numSteps = 0; // Finally, we print the values in reverse order (by popping // them off the stack). The first column consists of numbers // which start at 0 and increase by 1/sampleRate per row, so // we'll use numSteps/sampleRate to recalculate the appropriate // values. Print a tab for uniform spacing.

while (!s.isEmpty()) { fileOut.println((double) numSteps / sampleRate + "\t" + s.pop()); numSteps++; } // // Close the files // fileIn.close(); fileOut.close(); } catch(IOException ioe) { System.err.

println ("Error opening/reading/writing input or output file."); System.exit(1); } catch(NumberFormatException nfe) { System.err.println(nfe.toString()); System.err.println("Error in file format"); System.exit(1); } } }