文字列内のすべての部分文字列に一致し、一致するすべての開始位置を返す必要があります。
入力データの例:
2 4
AC
TGGT
4 25
CATA
TCATATGCAAATAGCTGCATACCGA
0 0 ## to end the file
実際には必要ないように思われるため、そのような行で数字を使用せずにこれを行いたいと思います;(ただし、入力ファイルにはまだあります)
そして、このコードの何が問題なのか正確にはわかりませんが、出力ファイルに 0 を印刷するという印刷 (無限ループ) を続けます。
#!/usr/bin/env python
import sys
from operator import itemgetter
def find_all(a_str, sub):
start = 0
while True:
start = a_str.find(sub, start)
if start == -1: return
yield start
start += len(sub)
if __name__ == '__main__':
testnum=0
input_file = open(sys.argv[1])
#input_lines=input_file.split("\n")
output_file = open(sys.argv[2],"w")
while True:
testnum+=1
values_raw = input_file.readline()
#values_raw=raw_input() ##rubish
values=values_raw.split()
flag=0
for element in values:
if element == "0":
break
string1=str(input_file.readline())
string2=str(input_file.readline())
lista = find_all(string2,string1)
output_file.write("\nTeste "+str(testnum)+"\nocorrencia direta: ")
for item in lista:
output_file.write(str(item)+" ")
#reversed search
string1=string1[::-1]
lista = find_all(string2,string1)
output_file.write("\nTeste "+str(testnum)+"\nocorrencia inversa complementar: ")
for item in lista:
output_file.write(str(item)+" ")
if ((len(string1)==0)):
break
コードを貼り付けるときに string1 と string2 の行を誤って削除しました //元の一致と逆の一致に一致しますが、コードはほとんど同じなので、これも投稿すべきではないと考えました。