CS136-Projects/Lab08/Lab8.c
cdez 8651123e1e Upload Lab 8 Files
++ Lab 8 Files

Signed-off-by: cdez <cdez@cdezselfhosted.pw>
2022-10-19 09:22:23 -07:00

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();
}