uayeb

uayeb

uayebはマヤ暦の「無名月」

uayeb RSS Feed
 
 
 
 

pythonハマり その2

\n(改行)でスプリットをかけることで、無事キーワードを切り出すことができました。

for i in range(3):

print keyword[i]

とすると、

キーワード1の内容

キーワード2の内容

キーワード3の内容

と表示されます。

そこで、それぞれのキーワードでデータベースを検索させると、おかしなことが起きるのです。

キーワード1はどことどこにある、ときちんとヒットするのに、キーワード2や3は、(データベース内には絶対にあるにもかかわらず)ヒットしない、

という現象が起きるのです。

キーワード1がきちんと検索できているので、データベース参照プログラムが間違っているわけではないと思われます。

また、キーワード入力の際に、 キーワード2、キーワード1、キーワード3 の順に指定すると、今度はキーワード2だけヒットしてキーワード1が

ヒットしなくなるので、エンコードなどの問題でキーワード2がヒットしないということでもないこともわかりました。

これは相当はまったのですが、以下のようなテストをしていて異常に気づきました。

for i in range(3):

print i, keyword[i] # 引数と、その引数で引いたkeyword[]の値を表示

とすると、

1 キーワード1の内容

キーワード2の内容

キーワード3の内容

…と出るのです。おわかりでしょうか、キーワード2と3では、左側に表示されるべきインデクスが、なぜか表示されないのです。

なんじゃこりゃあ。と思い、しかたがないので、分割する前のキーワード群が入った文字列sをファイルに書き出し、バイナリエディタで

見てみました。すると……

キーワード1の内容 0A 0D キーワード2の内容 0A 0D キーワード3の内容 0A

となっていたのです。

そして、pythonの文字列操作で使うエスケープ文字、\n(改行)は、16進の0Aにヒットするのでした。

したがって、文字列sを0Aで分割すると、

キーワード1

0D キーワード2

0D キーワード3

が、順にkeyword[]に入るのです。

上で、左側に表示されるべき引数が消えてしまったのは、キーワード2/3の前にある0D(復帰)によって

カーソルが左に寄せられてしまい、引数をキーワードが上書きしてしまっていたために起きた現象でした。

また、キーワード2/3は、頭に0D というコードが付いた状態になっていたために、データベース中の

キーワード2やキーワード3にヒットしなくなっていたのでした……。

というわけで、今回は、キーワードを検索に渡す前に、

keyword[x] = keyword[x].replace(“\x0D”,”")

として、復帰コードを削除することでようやく正常動作にこぎ着けました。

Leave a Reply

  • 711769 Visitors

  • twitter

    Pages

    カテゴリー

    メタ情報