Хорошо, я работал над этим некоторое время и не могу его получить.
Я делаю метод, который принимает имя файла и шаблон.
Например, findPattern (fname, pat)
Тогда цель состоит в том, чтобы найти этот шаблон, скажем, строку «яблоко» в открывшемся текстовом файле, и вернуть его местоположение по [строка, индекс начала символа] Я новичокна python и было сказано множество способов, но они либо слишком сложны, либо нам не разрешено использовать их, например, index;мы специально должны использовать массивы.
Мои мысли были двумя вложенными для циклов, внешняя сторона проходит через каждый индекс массива текстовых файлов, а внутренняя для цикла сравнивает первую букву нужного шаблона.Если он найден, внутренний цикл будет инерционирован, поэтому теперь он проверяет p в apple против текстового файла.
Одна из основных проблем заключается в том, что я не могу получить файл в массив, я смог сделать только целоеline.
Вот что у меня есть, хотя не совсем работает.Я просто экспериментировал с .tell, чтобы показать мне, где он, но он всегда в 141, который я считаю EOF, но я не проверял.
#.....Id #
#.....Name
#########################
#my intent was for you to write HW3 code as iteration or
#nested iterations that explicitly index the character
#string as an array; i.e, the Python index() also known as
#string.index() function is not allowed for this homework.
########################
print
fname = raw_input('Enter filename: ')
pattern = raw_input('Enter pattern: ')
def findPattern(fname, pat):
f = open(fname, "r")
for line in f:
if pat in line:
print "Found it @ " +(str( f.tell()))
break
else:
print "No esta..."
print findPattern(fname, pattern)
РЕДАКТИРОВАТЬ:
fname = raw_input('Enter filename: ')
pattern = raw_input('Enter pattern: ')
def findPattern(fname, pat):
arr = array.array('c', open(fname, 'rb').read())
for i in xrange(len(arr)):
if ''.join(arr[i:i+len(pat)]) == pat:
print 'Found @ %d' % i
print
findPattern(fname, pattern)
Итак, из нового кода, замененного выше, я получаю то, что ниже.Я знаю, что это что-то глупое, как массив, который не был объявлен, но я не совсем уверен, синтаксис Python для этого, разве массив не должен иметь установленный размер, когда вы объявляете его?
lynx:desktop $ python hw3.py
Enter filename: declaration.txt
Enter pattern: become
Traceback (most recent call last):
File "hw3.py", line 25, in <module>
findPattern(fname, pattern)
File "hw3.py", line 17, in findPattern
arr = array.array('c', open(fname, 'rb').read())
NameError: global name 'array' is not defined
РЕДАКТИРОВАТЬИ закончено!Спасибо, парни.Вот как я это определил ..
#Iterate through
for i in xrange(len(arr)):
#Check for endline to increment linePos
if arr[i] == '\n':
linePos = linePos + 1
colPos = i
#Compare a chunk of array the same size
#as pat with pat itself
if ''.join(arr[i:i+len(pat)]) == pat:
#Account for newline with absolute position
resultPos = i - colPos
print 'Found @ %d on line %d' % (resultPos, linePos)