2

この形式で保存されたアイテムからソートされたリストを作成するスクリプトを作成しようとしています:

&&
タスク:
プロジェクト:コンテキスト
:
DUE_DATE:
COMPLETION_DATE:
優先度:
%%

私がやろうとしていることの背後にあるロジックについてはかなり良い考えを持っていますが、私は Python に非常に慣れていないので、実装に苦労しています。これが私がこれまでに持っているものです:

import sys
import getopt

#add function
if sys.argv[1] == 'add':
    try:
        f = open("todo.txt", "added")
        try:
            f.write("TASK:" + sys.argv[2] + "\n")
            project = raw_input("Please enter the project: ")
            f.write("PROJECT:" + project + "\n")
            context = raw_input("Please enter the context: ")
            f.write("CONTEXT:" + context + "\n")
            duedate = raw_input("Please enter the due date: ")
            f.write("DUE_DATE:" + duedate + "\n")
            completiondate = raw_input("Please enter the completion date: ")
            f.write("COMPLETEION_DATE:" + completiondate + "\n")
            priority = raw_input("Please enter the priority level")
            f.write("PRIORITY:" + priority + "\n")
        finally:
            f.close()
    except IOError:
        pass

#list function
if sys.argv[1] == 'list':
    listnum = 1
    try:
        with open("todo.txt", "r") as f:
                searchlines = f.readlines()
        for i, line in enumerate(searchlines):  
                if "TASK:" in line: 
                    for l in searchlines[i:i+3]: 
                    print listnum, l[5:],   
                    listnum += listnum

    except IOError:
        pass

#complete function
if sys.argv[1] == 'complete':
    listName.pop(args[0]-1);#this pops it out and deletes it.  need to sort into order and from that list. delete that item
#by popping and it will be the -1 of the one from the list.

これで、追加機能が正常に動作します。argeparse(sp?) を使用すると、すべてのメタ データを 1 行で追加できることは理解していますが、できるだけシンプルに保つことにしました。現時点でのリスト機能は、ファイル内の順序に基づいてすべてのアイテムをリストするだけですが、フィルター機能のようなものはありません。また、TASK: 行以下のメタデータも表示されません。

リスト関数でやりたいことは、優先度に基づいてテキスト ファイル内のすべてのアイテムを既定のアクションで並べ替えることです。同じ行で追加の検索「タグ」を受け入れ、リスト機能で TASKS のリストを生成したい: 検索タグのいずれかと一致する任意の数のメタデータを持ち、フィルターされたリストも優先順位に基づいてソートされます。

私が考えているのは、優先順位 (A、B など) に文字タグを使用し、ファイル内の各エントリをトラバースすることです。次に、タスク名とすべてのメタ データを各フィルター タグと比較します。一致した場合は、優先度を確認し、優先度が「A」のエントリを表示します。優先度が「A」ではなく、一致が発生した場合は、ある種の bool フラグを 1 に変えて、プログラムが次のレベルの優先度を探すときにリストを再度トラバースする必要があることを知らせます。

やり方がわからないこと:

  1. リストをたどって一致を探し、次に優先順位を調べます。
  2. TASK: 行が列挙され、他のすべての行がインデントされ、列挙されていない、フィルタリングされた、またはフィルタリングされていないリストを表示します。
  3. 特定のフィルターのすべての有効なリスト候補が表示されたら、プログラムがリストの走査を停止する方法
  4. 以前に表示されたエントリがブール値をトリガーしないようにして、プログラムがさらにエントリを探し続けるようにします。
  5. 可能であれば、特定のタスク名を探して完了し、見つかった場合は、タスク名とテキスト ファイルの次の 6 行を削除したいと思います。

あなたが提供できる助けをありがとう!

4

0 に答える 0