commit 6fc4bba27fd5a1d6666e8e85b3a8d6b13bfa8ace Author: Gregory Campbell Date: Thu Jul 8 21:25:14 2021 -0400 Initial commit diff --git a/LOTR.txt b/LOTR.txt new file mode 100755 index 0000000..6ceac9b --- /dev/null +++ b/LOTR.txt @@ -0,0 +1,18 @@ +I amar prestar aen. Han mathon ne nen. Han mathon ne chae. A han noston +ned 'wilith. The world is changed. I feel it in the water. I feel it in +the earth. I smell it in the air. + +Much that once was is lost, for none now live who remember it. +It began with the forging of the Great Rings. Three were given to the +Elves, immortal, wisest, and fairest of all beings. Seven to the Dwarf +lords, great miners and craftsman of the mountain halls. And nine... +nine rings were gifted to the race of Men, who above all else desire power. +For within these rings was bound the strength and will to govern each race. +But they were all of them deceived, for another ring was made. In the land +of Mordor, in the fires of Mount Doom, the Dark Lord Sauron forged in +secret a master ring to control all others. And into this ring he poured +his cruelty, his malice, and his will to dominate all life. One ring to +rule them all. One by one, the free lands of Middle-earth fell to the power +of the Ring. But there were some who resisted. A last alliance of Men and +Elves marched against the armies of Mordor, and on the slopes of Mount +Doom, they fought for the freedom of Middle-earth. diff --git a/hobbit.txt b/hobbit.txt new file mode 100755 index 0000000..448e496 --- /dev/null +++ b/hobbit.txt @@ -0,0 +1,25 @@ +In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, +filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole +with nothing in it to sit down on or to eat: it was a hobbit-hole, and that +means comfort. It had a perfectly round door like a porthole, painted green, +with a shiny yellow brass knob in the exact middle. The door opened on to a +tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with +panelled walls, and floors tiled and carpeted, provided with polished chairs, +and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. +The tunnel wound on and on, going fairly but not quite straight into the side of +the hill - The Hill, as all the people for many miles round called it - and many +little round doors opened out of it, first on one side and then on another. No +going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of +these), wardrobes (he had whole rooms devoted to clothes), kitchens, +dining-rooms, all were on the same floor, and indeed on the same passage. The +best rooms were all on the left-hand side (going in), for these were the only +ones to have windows, deep-set round windows looking over his garden and meadows +beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and +his name was Baggins. The Bagginses had lived in the neighbourhood of The Hill +for time out of mind, and people considered them very respectable, not only +because most of them were rich, but also because they never had any adventures +or did anything unexpected: you could tell what a Baggins would say on any +question without the bother of asking him. This is a story of how a Baggins had +an adventure, found himself doing and saying things altogether unexpected. He +may have lost the neighbours' respect, but he gained-well, you will see whether +he gained anything in the end. \ No newline at end of file diff --git a/makefile b/makefile new file mode 100644 index 0000000..9e9542b --- /dev/null +++ b/makefile @@ -0,0 +1,8 @@ +main: wordStat.cob + cobc -x -free -Wall wordStat.cob + +old: stat.cob + cobc -x -free -Wall stat.cob + +clean: + rm out.txt stats.txt stat wordStat \ No newline at end of file diff --git a/middleE.txt b/middleE.txt new file mode 100755 index 0000000..82ad404 --- /dev/null +++ b/middleE.txt @@ -0,0 +1,5 @@ +The Lord of the Rings is an epic fantasy saga by the +British author J. R. R. Tolkien, his most popular work +and a sequel to his popular fantasy novel, The Hobbit. +The Lord of the Rings was written during World War II +and originally published in three volumes in 1954 and 1955. diff --git a/stat.cob b/stat.cob new file mode 100755 index 0000000..2670e49 --- /dev/null +++ b/stat.cob @@ -0,0 +1,130 @@ + identification division. + program-id. text-stats. + + environment division. + input-output section. + file-control. + select input-file assign to "text.txt" + organization is line sequential. + select output-file assign to "out.txt" + organization is line sequential. + + data division. + file section. + fd input-file. + 01 sample-input pic x(80). + fd output-file. + 01 output-line pic x(80). + + working-storage section. + 77 eof-switch pic 9 value 1. + 77 exit-switch pic 9. + 01 no-of-sentences pic s9(7) comp. + 01 no-of-words pic s9(7) comp. + 01 no-of-characters pic s9(7) comp. + 01 k pic s9(2) comp. + 01 input-area. + 02 line1 pic x occurs 80 times. + 01 output-title-line. + 02 filler pic x(31) value spaces. + 02 filler pic x(19) value "input text analyzed". + 01 output-underline. + 02 filler pic x(41) + value " ----------------------------------------". + 02 filler pic x(40) + value "----------------------------------------". + 01 output-area. + 02 filler pic x value space. + 02 out-line pic x(80). + 01 output-statistics-line-1. + 02 filler pic x(20) value spaces. + 02 filler pic x(20) value "number of sentences=". + 02 out-no-senten pic -(7)9. + 01 output-statistics-line-2. + 02 filler pic x(19) value spaces. + 02 filler pic x(33) value "number of words=". + 02 out-no-word pic -(7)9. + 01 output-statistics-line-3. + 02 filler pic x(19) value spaces. + 02 filler pic x(33) value "number of chars=". + 02 out-no-char pic -(7)9. + 01 output-statistics-line-4. + 02 filler pic x(19) value spaces. + 02 filler pic x(33) + value "average number of words/sentence=". + 02 aver-words-se pic -(4)9.9(2). + 01 output-statistics-line-5. + 02 filler pic x(20) value spaces. + 02 filler pic x(31) + value "average number of symbols/word=". + 02 aver-char-wor pic -(4)9.9(2). + + procedure division. + open input input-file, output output-file. + move 2 to exit-switch. + perform proc-body until exit-switch is equal to 3. + + proc-body. + move zeroes to no-of-sentences, no-of-words, no-of-characters. + move 81 to k. + write output-line from output-title-line after advancing 0 lines. + write output-line from output-underline after advancing 1 line. + move 2 to exit-switch. + perform outer-loop until exit-switch is equal to zero. + + outer-loop. + read input-file into input-area at end perform end-of-job. + move input-area to out-line. + write output-line from output-area after advancing 1 line. + subtract 80 from k. + perform new-sentence-proc until exit-switch is equal to zero + or k is greater than 80. + + new-sentence-proc. + move 2 to exit-switch. + if line1(k) is not equal to "/" + perform process-loop + until k is greater than 80 or exit-switch is less than 2 + else perform output-statistics-proc. + + output-statistics-proc. + move no-of-sentences to out-no-senten. + move no-of-words to out-no-word. + move no-of-characters to out-no-char. + divide no-of-sentences into no-of-words + giving aver-words-se rounded. + divide no-of-words into no-of-characters + giving aver-char-wor rounded. + write output-line from output-underline after advancing 1 line. + write output-line from output-statistics-line-1 after advancing 1 line. + write output-line from output-statistics-line-2 after advancing 1 line. + write output-line from output-statistics-line-3 after advancing 1 line. + write output-line from output-statistics-line-4 after advancing 1 line. + write output-line from output-statistics-line-5 after advancing 1 line. + write output-line from output-underline after advancing 1 line. + move zero to exit-switch. + + process-loop. + if line1(k) is equal to space + add 1 to no-of-words + add 1 to k + else if line1(k) is not equal to "." + add 1 to k + if line1(k) is not equal to "," + if line1(k) is not equal to ";" + if line1(k) is not equal to "-" + add 1 to no-of-characters + else + next sentence + else + next sentence + else next sentence + else add 1 to no-of-sentences + add 1 to no-of-words + add 3 to k + move 1 to exit-switch. + + end-of-job. + close input-file, output-file. + + stop run. diff --git a/text.txt b/text.txt new file mode 100755 index 0000000..a6807c5 --- /dev/null +++ b/text.txt @@ -0,0 +1,5 @@ +It may be hard for an egg to turn into a bird: it would be a jolly sight harder +for it to learn to fly while remaining an egg. We are like eggs at present. And +you cannot go on indefinitely being just an ordinary, decent egg. We must be +hatched or go bad. +/ \ No newline at end of file diff --git a/vader.txt b/vader.txt new file mode 100755 index 0000000..658c721 --- /dev/null +++ b/vader.txt @@ -0,0 +1,3 @@ +I've been waiting for you Obi-Wan. We meet again, at last. +The circle is now complete; when I left you, I was but the +learner, now I am the master. Only a master of evil, Darth. diff --git a/wordStat.cob b/wordStat.cob new file mode 100755 index 0000000..81fb94b --- /dev/null +++ b/wordStat.cob @@ -0,0 +1,166 @@ +*> Program Created by Gregory Campbell + + identification division. + program-id. wordStat. + + environment division. + input-output section. + file-control. +*>I set up the input and output files so the input file name is dynamic whereas the +*>output file is always created with the same name + select input-file assign to dynamic fname + organization is line sequential + file status is inputFS. + select output-file assign to "stats.txt" + organization is line sequential + file status is outputFS. + + data division. + file section. +*>Declaration of all the variables used throughout the program + fd input-file. + 01 finput pic x(80). + fd output-file. + 01 foutput pic x(80). + + working-storage section. + 77 endOfFile pic 9 value 1. + 77 inputFS pic xx. + 77 outputFS pic xx. + 77 fname pic x(30). + + 01 numSent pic s9(7) comp. + 01 numWords pic s9(7) comp. + 01 numChar pic s9(7) comp. + 01 numNums pic s9(7) comp. + 01 linePos pic s9(2) comp. + 01 skip pic s9(2) comp. + 01 input-area. + 02 charScan pic x occurs 80 times. + 01 output-title. + 02 filler pic x(20) value "INPUT TEXT ANALYZED:". + 01 output-underline. + 02 filler pic x(40) + value "----------------------------------------". + 02 filler pic x(40) + value "----------------------------------------". + 01 output-area. + 02 filler pic x value space. + 02 out-line pic x(80). + 01 output-stat-1. + 02 filler pic x(20) value "number of sentences=". + 02 outSent pic -(7)9. + 01 output-stat-2. + 02 filler pic x(16) value "number of words=". + 02 outWords pic -(7)9. + 01 output-stat-3. + 02 filler pic x(16) value "number of chars=". + 02 outChar pic -(7)9. + 01 output-stat-4. + 02 filler pic x(16) value "number of nums=". + 02 outNums pic -(7)9. + 01 output-stat-5. + 02 filler pic x(33) + value "average number of words/sentence=". + 02 averWordSent pic -(4)9.9. + 01 output-stat-6. + 02 filler pic x(31) + value "average number of symbols/word=". + 02 averCharWord pic -(4)9.9. + +*>Program starts by asking the user to input the name of the file that will be analyzed + procedure division. + display "Input filename: ". + accept fname. + +*>checks if file exists, program ends if it doesnt exist + open input input-file. + if inputFS not = "00" + if inputFS = "35" + display "File not found: ", fname + stop run + end-if + end-if. + + open output output-file. + + write foutput from output-title after advancing 0 lines. + + compute numSent = 0. + compute numWords = 0. + compute numChar = 0. + compute numNums = 0. + +*> calls function that runs until the file is completely analyzed + perform readFile + until endOfFile is = 0. + +*>stat values are moved into output variables and all output +*>is put onto the output file + compute outSent = numSent. + compute outWords = numWords. + compute outChar = numChar. + compute outNums = numNums. + compute averWordSent = numWords / numSent. + compute averCharWord = numChar / numWords. + write foutput from output-underline after advancing 1 line. + write foutput from output-stat-1 after advancing 1 line. + write foutput from output-stat-2 after advancing 1 line. + write foutput from output-stat-3 after advancing 1 line. + write foutput from output-stat-4 after advancing 1 line. + write foutput from output-stat-5 after advancing 1 line. + write foutput from output-stat-6 after advancing 1 line. + write foutput from output-underline after advancing 1 line. + + close input-file. + close output-file. + + display "Word Statistics generated to stats.txt". + + stop run. + +*>function that goes through everyline of the file until end of file is reached +*>writes every line of this file into the output file +*>calls a function that looks at every character + readFile. + compute linePos = 81. + read input-file into input-area + at end compute endOfFile = 0 + end-read. + if endOfFile is not = 0 + move input-area to out-line + write foutput from output-area after advancing 1 line + end-if. + compute linePos = 0. + perform statCheck + until linePos is > 80 or endOfFile is = 0. + +*>function looks at every character in the file in order to determine +*>what statistic can be found based on the character and possibly +*>the character in after it depending on the character + statCheck. + compute skip = 0. + + if charScan(linePos) is equal to space + compute linePos = linePos + 1 + if charScan(linePos) is not equal to space + compute numWords = numWords + 1 + else + compute skip = skip + 1 + else if charScan(linePos) is equal to "." or "!" or "?" + compute numSent = numSent + 1 + compute linePOs = linePos + 1 + else if charScan(linePos) is numeric + compute linePos = linePos + 1 + if charScan(linePos) is numeric + compute skip = skip + 1 + else + compute numNums = numNums + 1 + else if charScan(linePos) is not alphabetic + compute linePos = linePos + 1 + else + compute numChar = numChar + 1 + compute linePos = linePos + 1. + + end-of-job. +