- PR -

テキストファイルの比較

1
投稿者投稿内容
レオ
常連さん
会議室デビュー日: 2006/10/14
投稿数: 21
投稿日時: 2007-02-20 16:09
コード:
text1.txt   |   text2.txt    |  text3
----------  |  -----------   | ---------------
aaa         |  ・・・   aaa  |  ・・・   ddd  
bbb         |  ・・・  bbb  |  ・・・   eee  
ccc         |  ・・・   ccc  |
            |  ・・・   aaa  |
            |  ・・・   ddd  |
            |  ・・・   ccc  |
            |  ・・・   eee  |


上記のような2つのリスト形式のtext1とtext2を比較し、text2中でtext1に指定されたものを含まない
テキストファイルtext3.txtを作成したいと考えています。

1.text2を1行ずつ読み込み、Listにadd()していく。
2.text1を1行ずつ読み込み、Listの要素と比較(contains())し、
trueならListから削除していく

ということをしてみたのですが、どうもうまくいきません。
(重複している部分が残る)
何かよい方法がありましたらご教授願えればと思います。

* 「・・・ aaa」というのは、1行の中に比較したいもの(aaa)が含まれている
という状況を指しています。(「000 test aaa」といったような)
ちょっと説明が分かりづらいとは思いますが、宜しくお願いいたします。
三等兵
会議室デビュー日: 2006/11/14
投稿数: 10
投稿日時: 2007-02-20 16:25
text1 で指定されなかったものが text2 で重複していた場合の出力はどのようになるのでしょうか?
例えば、text1 で「aaa」が無かったとき、text3では「aaa」はいくつ出力されるのでしょうか?

もし1つでいいなら、text2 を1行ずつ読み、追加して行く先のオブジェクトを
List から Set にしてみるのはいかがでしょう?

重複しているものは重複している数だけ text3 に出力したいと言うことなら、
>2.text1を1行ずつ読み込み、Listの要素と比較(contains())し、
>trueならListから削除していく
という動作のあと、contains() が false になるまで同じ事を繰り返してやればいいと思います。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-02-20 16:25
要件をよく把握していませんが、問題は重複ということなのでしょうか。
最初にSetに挿入するなどして重複をなくしてしまえばいいのではないですか?

コード:
List text1;
List text2;
List text3;

Set set = new HashSet();
set.addAll(text2);
set.removeAll(text1);

text3.addAll(set);

びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2007-02-20 16:44
ロジックが逆なんじゃないんですか ?

text1.txtの内容を保持しておいて、
text2.txtを1行ずつ読みながら、上記保持内容にあればスルー、
なければtext3.txtに出力。
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2007-02-20 16:52
びしばしさんに同意。

text1.txtはユニークでデータも少なそうな感じがするし。

[ メッセージ編集済み 編集者: KOX 編集日時 2007-02-20 16:52 ]
1

スキルアップ/キャリアアップ(JOB@IT)