1

ユーザーがデータを入力してキャンバスに描画できるようにするプログラムがあります(毎週のスキームのように)。ユーザーがエントリを削除またはやり直しできるようにしたいのですが(クリックイベントで行います)、私の質問は次のとおりです。

テキストファイルの特定の行を読み取るにはどうすればよいですか? 考えられるテキストファイルのサンプル:

Abe
#0080c0 
February
Friday 
21 
Part delivery 

John 
#ff8000 
July 
Sunday 
21 
Social 

Egon 
#ff80ff 
April 
Thursday 
15 
Work 

これはテキストファイルのごく一部であることに注意してください。理想的には、これらの 6 行のクラスターが 56 個含まれています。

テキストを挿入するための私のコード:

taskentry = str(tasknameentry.get())
monthentry = str(monthvar.get())
dayentry = str(dayvar.get())
dateentry = str(datevar.get())
activityentry = str(typevar.get())

tasklist = [taskentry, hexstr, monthentry, dayentry, dateentry, activityentry]
taskfile = open('taskfile.txt', 'a')
for word in tasklist:
    taskfile.write('%s \n' % word)
taskfile.write('\n')
taskfile.close()

したがって、ユーザーが「タスク」をやり直したり削除したりできるようにするには、ファイルを読み取って特定のタスク名などを探す必要がありますが、方法がわかりません。私は自分の本の .write と .read の部分を読み、ここでドキュメントと質問を見ましたが、有効な解決策を生み出すことができませんでした。

今必要なのは、fx John を検索するときに 6 つの追加行を fx で読み取る方法です。だから私は将来、クリックで選択したやり直しまたは削除イベントを持つことができます。

事前に、ありがとう!

よろしく、キャスパー

4

3 に答える 3

1

ファイルがそれほど大きくない場合は、ファイルをバッファーに読み取り、そのバッファーを変更して、バッファーをファイルに書き戻すことができます。簡単なコード スニペットは次のようになります。

#open the file
f = open('file.txt')
lines = f.readlines()
lineNum = -1

#find the line to modify
for i, line in enumerate(lines):
    if line.strip() == "John":
        lineNum = i
        break

if lineNum == -1:
    #Line not found, handle the error..

#modify the buffer with the new data
newtasklist = [taskentry, hexstr, monthentry, dayentry, dateentry, activityentry]
for task in newtasklist:
    lines[lineNum] = task
    lineNum += 1

#or if you want to remove the task list :
lines = lines[:lineNum] + [lineNum + 7:]

# and write everything back
with open('file.txt', 'w') as file:
    file.writelines(lines)
于 2012-12-29T00:21:07.187 に答える
0

まず第一に、私はこれが得意ではありませんが、ドキュメント全体をスキャンして文字列の ArrayList に保存すると、特定の行を削除したり、行を追加したり、行を変更したりできます。

その後、ドキュメントの情報を消去して、ArrayList の内容を再貼り付けできます。

特定の行の読み取りに関しては、実際には Scanner または FileWriter を使用して行を読み取る方法があるとは思いません。

これが本当に役に立たない場合は申し訳ありません。少しでもお役に立てるように頑張ります!

いくつかのサンプルコードは次のようになります:

ArrayList<String> taskList = new <String>ArrayList;

File file = new File(<File Name>);
try
{
    Scanner scan = new Scanner(file);
    while(scan.hasNext())
    {
            taskList.add(scan.next());
    }
} catch (FileNotFoundException e)
{
    e.printStackTrace();
    return;
}

これにより、単語の検索可能な配列が作成され、必要なだけ削除および追加できます。次に、ドキュメントをクリアして、配列リストから新しい情報を再度貼り付けます。

于 2012-12-29T00:14:27.610 に答える
0

readlines を使用して、各エントリが txt ファイルの別の行であるリストを作成できます。次に、このリストの特定のエントリを変更し、writelines を使用して txt ファイルを変更できます。

Tasks=open('taskfile.txt', 'r').readlines()

データには、名前ごとに各人のタスクがあります。

Data={}
n=0
try:
  while True:
     Data[Tasks[n+n*6]]=Tasks[n+1:n+6]
     n+=1
except:
   pass

次に、John の 2 番目のタスクを次のように変更できます。

Data['John'][1]='Football'
于 2012-12-29T00:23:35.333 に答える