2017-07-06 13 views
0

でこの種類のファイルを変更するためにどのように私のようなファイルがあります:顧客IDとアイテム:コメント除きルビー

Fruit.Store={ 
    #order:123, order:345, order:456 
    #order:789 
    "customer-id:12345,item:store/apple" = 10;  
    "customer-id:23456,item:store/banana" = 10; 
    "customer-id:23456,item:store/watermelon" = 10; 
    #order:987 
    "customer-id:67890,item:store/pear" = 10; 
} 

を、各ラインは同じフォーマットを持っている店が固定されている/、およびcustomer- idは5桁の数字です。ファイルには約1000のユニークな行があります。

同じ数量の同じ顧客IDと果物の種類に基づいて新しい注文が行われた場合、新しい注文001に情報が格納されているように、注文のIDを上記のコメント行に追加して数量を更新します。 "customer-id:23456、item:store/watermelon" = 5;新しいファイルを用意するよりも:

Fruit.Store={ 
    #order:123, order:345, order:456 
    #order:789, order:000 
    "customer-id:12345,item:store/apple" = 10;  
    "customer-id:23456,item:store/banana" = 10; 
    "customer-id:23456,item:store/watermelon" = 5; 
    #order:987 
    "customer-id:67890,item:store/pear" = 10; 
} 

これは効率的な方法で可能ですか?ファイルは1行ずつ読み書きしなければならないので、どのようにして一致した情報を検出し、前の行に戻って変更を行うことができますか?ありがとうございました。

+0

ファイルはどこから来ましたか?どのプログラムがそれを生成しましたか? –

+1

この形式でデータを保存しないでください。それをデータベースや別のファイル(JSON、CSV、XMLなど)で解析しやすい形式で保管してください。データを更新するたびにこのファイルを必要な形式で生成しますが、それを読み取ることはありません。 – axiac

+0

それは何らかの理由で手動で生成されたファイルです.txt形式でなければなりません...ありがとう –

答えて

0

簡潔には:いいえ、効率的な方法でを行うことはできません。あなたの最善の策は、読み書き用に別々のファイルを開くことですが、それでも効果的にファイル全体を何度も書き直すことになります。

最終的には、SQLのような参照データベースを使用する必要があります。これらのデータベースは、この正確なユースケースのために実際に発明されました。

唯一の解決策は、自分がやっていることとはまったく異なることをすることですが、この場合、データ管理のためにテキストファイルの規模がいかに十分かを強調することはできません。