Très bien, j'ai travaillé dessus pendant un moment et je ne peux pas l'obtenir.Ouvrir le fichier dans le tableau, rechercher la chaîne et renvoyer la valeur
Je fais une méthode qui accepte un nom de fichier, et un modèle.
Par exemple findPattern (FNAME, pat)
Ensuite, l'objectif est de chercher ce modèle, par exemple la chaîne « pomme » dans le fichier texte qui est ouvert, et le retour de son emplacement par [ligne, commençant index de caractère ] Je suis novice en python et on m'a dit de nombreuses façons, mais elles sont soit trop compliquées, soit nous ne sommes pas autorisés à les utiliser comme index; nous sommes spécifiquement supposés utiliser des tableaux. Mes pensées étaient deux imbriquées pour des boucles, l'extérieur passe par chaque index du tableau de texte, et la boucle interne compare la première lettre du motif désiré. Si elle est trouvée, la boucle interne va s'incrémenter alors maintenant elle vérifie le p dans apple par rapport au fichier texte.
Un problème majeur est que je ne peux pas obtenir le fichier dans un tableau, j'ai seulement été capable de faire une ligne entière.
Voici quelque chose que j'ai, mais ne fonctionne pas tout à fait. J'expérimentais juste avec .tell pour me montrer où il est mais c'est toujours à 141, ce que je crois être l'EOF mais je n'ai pas vérifié.
#.....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)
EDIT:
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)
donc du nouveau code remplacé ci-dessus, je reçois ce qui est ci-dessous. Je sais que c'est quelque chose d'idiot comme le tableau qui n'est pas déclaré mais je ne suis pas vraiment sûr de la syntaxe python pour cela, est-ce qu'un tableau n'a pas besoin d'avoir une taille définie quand vous le déclarez?
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
EDIT: Et, terminé! Merci les gars. Voilà comment je finagled il ..
#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)
ce que vous avez là ne sera probablement pas autorisé non plus car l'opérateur 'in' est une sorte de triche. Il semble que votre enseignant vous demande d'implémenter manuellement une recherche de sous-chaîne. – aaronasterling
Pour lire le fichier dans une liste (* not * tableau) dans Python 2.x, utilisez 'f.readlines()'. –