280 lines
9.1 KiB
C
280 lines
9.1 KiB
C
// header files
|
|
#include "StandardConstants.h"
|
|
#include "Console_IO_Utility.h"
|
|
#include "File_Input_Utility.h"
|
|
#include "File_Output_Utility.h"
|
|
|
|
|
|
// function prototypes
|
|
|
|
/*
|
|
Name: isLowerCaseLetter
|
|
Process: returns true if test character is lower case letter,
|
|
MUST USE ONLY one line of code
|
|
Function input/parameters: test character (char)
|
|
Function output/parameters: none
|
|
Function output/returned: Boolean result of specified test
|
|
Function input/keyboard: none
|
|
Device input/file: none
|
|
Dependencies: none
|
|
*/
|
|
bool isLowerCaseLetter(char testChar);
|
|
|
|
|
|
/*
|
|
Name: isUpperCaseLetter
|
|
Process: returns true if test character is upper case letter,
|
|
MUST USE ONLY one line of code
|
|
Function input/parameters: test character (char)
|
|
Function output/parameters: none
|
|
Function output/returned: Boolean result of specified test
|
|
Function input/keyboard: none
|
|
Device input/file: none
|
|
Dependencies: none
|
|
*/
|
|
bool isUpperCaseLetter(char testChar);
|
|
|
|
|
|
|
|
|
|
/*
|
|
Name: countLettersInFile
|
|
Process: input file is opened and checked for success,
|
|
characters are retrieved and counted;
|
|
upper case, lower case, and other symbol ints are updated,
|
|
pointer must be dereferenced to so it can be incemented use "*"
|
|
if file opening failure occurs returns false
|
|
Function input/parameters: file name (const char *)
|
|
Function output/parameters: upper and lower case values as well as other symbols
|
|
Function output/returned: Boolean result of operation as specified
|
|
Function input/keyboard: none
|
|
Device input/file: data accessed from hard drive as specified
|
|
Dependencies: File Input Utility tools, isUpperCaseLetter, isLowerCaseLetter,
|
|
getLetterIndex
|
|
*/
|
|
bool countLettersInFile(char *inputFileName, int *upperCaseLetters,
|
|
int *lowerCaseLetters, int *otherSymbols);
|
|
|
|
|
|
/*
|
|
Name: outputResultsToFile
|
|
Process: opens file for output, writes multiple strings and integers to file,
|
|
each pair of string and integer has coresponding endline
|
|
Function input/parameters: file name (const char *),
|
|
int upper case letters,
|
|
int lower case letters,
|
|
int other symbols letters,
|
|
Function output/parameters: none
|
|
Function output/returned: none
|
|
Function input/keyboard: none
|
|
Device output/file: none
|
|
Dependencies: openOutputFile, writeStringToFile, writeIntegerToFile,
|
|
writeEndlineToFile, closeOutputFile
|
|
*/
|
|
void outputResultsToFile(char *outputFileName, int upperCaseLetters,
|
|
int lowerCaseLetters, int otherSymbols);
|
|
|
|
// main program
|
|
int main()
|
|
{
|
|
// initialize function
|
|
|
|
// initialize variables, function
|
|
char inputFileName[ STD_STR_LEN ], outputFileName[ STD_STR_LEN ];
|
|
int upperCaseLetters = 0, lowerCaseLetters = 0, otherSymbols = 0;
|
|
bool fileSuccess;
|
|
|
|
// show title
|
|
// function: printf
|
|
printf( "\nLETTER ANALYSIS PROGRAM\n" );
|
|
printf( "=======================\n\n" );
|
|
|
|
// get input
|
|
|
|
// get input file name
|
|
// function: promptForString
|
|
promptForString( "Enter input file name to be accessed: ",
|
|
inputFileName );
|
|
|
|
// get output file name
|
|
// function: promptForString
|
|
promptForString( "Enter output file name for output : ",
|
|
outputFileName );
|
|
|
|
|
|
// processing
|
|
|
|
// run analysis process
|
|
// function: countLettersInFile
|
|
fileSuccess = countLettersInFile( inputFileName,
|
|
&upperCaseLetters,
|
|
&lowerCaseLetters,
|
|
&otherSymbols );
|
|
|
|
// output/display results
|
|
|
|
// check for successful access
|
|
if( fileSuccess )
|
|
{
|
|
// output both letter analyses to file
|
|
// function: outputResultsToFile
|
|
outputResultsToFile( outputFileName,
|
|
upperCaseLetters,
|
|
lowerCaseLetters,
|
|
otherSymbols );
|
|
// print success message
|
|
// function: printf
|
|
printf( "\nSUCCESS: Output was saved to file\n\n" );
|
|
}
|
|
// otherwise, assume failed file access
|
|
else
|
|
{
|
|
// print error message
|
|
// function: printf
|
|
printf( "\nERROR: Unable to open input file,"
|
|
"program aborted\n\n" );
|
|
}
|
|
|
|
// end program
|
|
|
|
// show program end
|
|
// function: printf
|
|
printf( "Program End\n" );
|
|
|
|
// return successful program
|
|
return 0;
|
|
}
|
|
|
|
|
|
// supporting functions
|
|
|
|
/*
|
|
Name: countLettersInFile
|
|
Process: input file is opened and checked for success,
|
|
characters are retrieved and counted;
|
|
upper case, lower case, and other symbol ints are updated,
|
|
pointer must be dereferenced to so it can be incemented use "*"
|
|
if file opening failure occurs returns false
|
|
Function input/parameters: file name (const char *)
|
|
Function output/parameters: upper and lower case values as well as other symbols
|
|
Function output/returned: Boolean result of operation as specified
|
|
Function input/keyboard: none
|
|
Device input/file: data accessed from hard drive as specified
|
|
Dependencies: File Input Utility tools, isUpperCaseLetter, isLowerCaseLetter,
|
|
getLetterIndex
|
|
*/
|
|
bool countLettersInFile(char *inputFileName, int *upperCaseLetters,
|
|
int *lowerCaseLetters, int *otherSymbols)
|
|
{
|
|
// Initialize variables
|
|
char testChar;
|
|
*lowerCaseLetters = 0;
|
|
*upperCaseLetters = 0;
|
|
*otherSymbols = 0;
|
|
bool fileSuccess;
|
|
// Open the file and check for success
|
|
// Function openInputFile
|
|
fileSuccess = openInputFile(inputFileName);
|
|
// Count and retrieve characters in file
|
|
// Create while loop
|
|
while(!checkForEndOfInputFile())
|
|
{
|
|
testChar = readCharacterFromFile();
|
|
// Function isLowerCaseLetter, isUpperCaseLetter
|
|
if(isLowerCaseLetter(testChar))
|
|
{
|
|
// Count for lowercase
|
|
*lowerCaseLetters = *lowerCaseLetters + 1;
|
|
}
|
|
else if(isUpperCaseLetter(testChar))
|
|
{
|
|
// Count for uppercase
|
|
*upperCaseLetters = *upperCaseLetters + 1;
|
|
}
|
|
else
|
|
{
|
|
// Count for symbols
|
|
// Catch all else statemnt
|
|
*otherSymbols = *otherSymbols + 1;
|
|
}
|
|
}
|
|
*otherSymbols = *otherSymbols - 1;
|
|
// return
|
|
return fileSuccess;
|
|
}
|
|
|
|
|
|
/*
|
|
Name: isLowerCaseLetter
|
|
Process: returns true if test character is lower case letter,
|
|
MUST USE ONLY one line of code
|
|
Function input/parameters: test character (char)
|
|
Function output/parameters: none
|
|
Function output/returned: Boolean result of specified test
|
|
Function input/keyboard: none
|
|
Device input/file: none
|
|
Dependencies: none
|
|
*/
|
|
bool isLowerCaseLetter(char testChar)
|
|
{
|
|
// check if letter is lowercase
|
|
return testChar >= 'a' && testChar <= 'z';
|
|
}
|
|
|
|
|
|
/*
|
|
Name: isUpperCaseLetter
|
|
Process: returns true if test character is upper case letter,
|
|
MUST USE ONLY one line of code
|
|
Function input/parameters: test character (char)
|
|
Function output/parameters: none
|
|
Function output/returned: Boolean result of specified test
|
|
Function input/keyboard: none
|
|
Device input/file: none
|
|
Dependencies: none
|
|
*/
|
|
bool isUpperCaseLetter(char testChar)
|
|
{
|
|
//check if char is lowerCase
|
|
return testChar >= 'A' && testChar <= 'Z';
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
Name: outputResultsToFile
|
|
Process: opens file for output, writes multiple strings and integers to file,
|
|
each pair of string and integer has coresponding endline
|
|
Function input/parameters: file name (const char *),
|
|
int upper case letters,
|
|
int lower case letters,
|
|
int other symbols letters,
|
|
Function output/parameters: none
|
|
Function output/returned: none
|
|
Function input/keyboard: none
|
|
Device output/file: none
|
|
Dependencies: openOutputFile, writeStringToFile, writeIntegerToFile,
|
|
writeEndlineToFile, closeOutputFile
|
|
*/
|
|
void outputResultsToFile(char *outputFileName, int upperCaseLetters,
|
|
int lowerCaseLetters, int otherSymbols)
|
|
{
|
|
// Opens output file
|
|
openOutputFile(outputFileName);
|
|
// Write string count to output file
|
|
// Endline between each line of data
|
|
// Functions openOutputFile, writeStringToFile, writeIntegerToFile
|
|
// functions: writeEndlineToFile, closeOutputFile
|
|
writeStringToFile("Total upper case letters : ");
|
|
writeIntegerToFile(upperCaseLetters);
|
|
writeEndlineToFile();
|
|
writeStringToFile("Total lower case letters : ");
|
|
writeIntegerToFile(lowerCaseLetters);
|
|
writeEndlineToFile();
|
|
writeStringToFile("Total other symbols : ");
|
|
writeIntegerToFile(otherSymbols);
|
|
writeEndlineToFile();
|
|
|
|
|
|
|
|
}
|