# HELP Newbie solve this Problem

Mark Hathaway hathawa2 at marshall.edu
Sun Mar 26 06:02:21 CEST 2000

```>>> On Fri, 24 Mar 2000 03:43:38 GMT, race9047 at my-deja.com declaimed the
>>> following in comp.lang.python:
>>>
>>>       I must be from a different world then... The second part is what
>>> I'd find easy... even in FORTRAN (maybe too easy in FORTRAN)

>> At 21:10 3/23/00 -0800, Dennis Lee Bieber wrote:
>>
>>       integer counts(26)      / 26 * 0 /      ! or is it 0 * 26?
>>       character       line*132        ! set for the longest line the
>>                                       ! the data file can contain
>>       open(10, file="data", status="old")
>>   10  continue
>>       if (ios .eq. 0) then
>>           do 20 i=1, 132              ! or the line length max
>>               if (line(i:i) .ge. 'a' .and. line(i:i) .le. 'z') then
>>                       inx = ichar(line(i:i)) - ichar('a') + 1
>>                       counts(inx) = counts(inx) + 1
>>               elseif (line(i:i) .ge. 'A' .and. line(i:i) .le. 'Z')
>>     x                                                 then
>>                       inx = ichar(line(i:i)) - ichar('A') + 1
>>                       counts(inx) = counts(inx) + 1
>>               else
>>                       continue        ! just my style
>>               endif
>>   20      continue
>>       goto 10
>>       endif
>>       close(10)
>>       do 30 i=1, 26
>>           print *, char(i), '     ', counts(i)
>>   30  continue
>>       stop
>>
>>
>>       It would look much cleaner in Python, and I'd use case
> >conversion modules rather than the duplicates in the IF statements...

I'm probably giving away somebody's homework, but I can't allow that
stupid Fartran to stand without comparison to Python.

Python  53 lines commented
22 lines uncommented

---------------------------- snip here--------------------
class charFreq:

# Written by: Mark Hathaway
# Date: 2000.03.25
#
# This class allows one to read text from a file,
# tally the frequency of each character in the text,
# report the frequency of either all or only specified characters
# and specifically ignore case - count uppercase A..Z as a..z.

'''Usage:
from freqchar import charFreq
obj = charFreq()
obj.getText("filename.ext")

obj.reportCounts()
It defaults to reporting on string.letters & ignoreCase = None

obj.reportCounts(stringOfCharsToLookFor,ignoreCase)
use obj.reportCounts("any letters","true") to give some
specific
selection of letters and case specificity.'''

def getText (self, filename):
self.charDict = {}   # to store each letter and occurrences of
it
self.keys = []       # to store charDict.keys() - to sort later
for char in self.text:
if char not in self.keys:
self.charDict[char] = 1
self.keys.append(char)
else:
self.charDict[char] = self.charDict[char] + 1

def reportCounts (self,
lookfor="abcdefghijklmnopqrstuvwxyz"+
"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
ignoreCase=None):

'''One provides a character string and this method counts
the occurrences of each character of the string in the
text. If you're using the ignoreCase='true' option then
provide the lowercase in the lookfor character string
e.g.  obj.reportCounts('abcxyz')'''

from string import uppercase, lower
self.keys.sort()
for char in lookfor:
if ignoreCase and (char in uppercase):
char = lower(char)
if char in self.keys:
print char, self.charDict[char]

#end charFreq

```