• 締切済み

Javaの質問です

javaでリストの比較をしたいと思っています。 ファイルAの中身を抽出したものをArrayListで格納しました。そして次にファイルBの中身を抽出しました。 ファイルBで抽出したものとファイルAのリストの中身を検索し一致しているものがあったら ファイルBの中身の数値を追加したいと思っています。 ファイルAの中身 1,田中 2,山田 3,加藤 この中身をListにしたのが↓ ファイルAのList(カンマ区切り) [1][田中] [2][山田] [3][加藤] ファイルBの中身 1 test 100 となっており 一致したらファイルAに追加したい数値とはファイルBでいう100という数字です。 どうやって2つのものを比較をし検索したらいいのでしょうか? Mapというものを見つけたのですがこの例でいったらどのように書けばいいのでしょうか... よろしくおねがいしますっ

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

読み込み部分は出来てるのですよね? java.util.Map<String,String> fa = new java.util.HashMap<String,String>(); // loopで ファイルAから1行ずつ読みながら、 HashMapに格納, 以下はテスト格納 fa.put("1","田中"); fa.put("2","山田"); // ファイルB の読み込みデータをList<String>に格納 java.util.List<String> fb = new java.util.ArrayList<String>(); // loopで ファイルBから1行ずつ読みながら、ArrayListに格納, 以下はテスト格納 fb.add("1"); fb.add("test"); fb.add("100"); // 書き込み先の準備: とりあえず、System.out.println() で書き出してみる // ファイルBが3行以上有れば処理する、とりあえずマッチする物が無くても、元のファイルAと同じ物を出力。 if(fb.size() > 2){ String flag = fb.get(0); if(flag != null){ for(String key : fa.keySet()){ String str = key + "," + fa.get(key); if(flag.equals(key) ){ str += "," + fb.get(2)); } System.out.println(str); } } }

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

以下の点補足をお願いします。 (1)ファイルBの中身はこの3行だけなのか、それともこの3行形式のデータが複数並んでいるのか (2)2行目の test は気にしなくていいのか (3)あなたの言う「一致」はファイルAの行の最初の項とファイルBのデータの1行目とが一致するという事でいいのか (4)追加というのは  1,田中,100 ということでいいのか (5)ファイルBにデータがないファイルAの行はどのように処理をするか(「そのままの状態にしておく」「後方にカンマだけ付ける」「0という数値を付加する」等考えられます)

ankoromochiii
質問者

補足

補足させていただきます。 (1)ファイルBの中身はこの3行だけなのか、それともこの3行形式のデータが複数並んでいるのか ・ファイルBの中身はこの3行のものだけです (2)2行目の test は気にしなくていいのか ・今回の例の場合はtestはファイルAの中の要素と一致しないので気にしません。 (3)あなたの言う「一致」はファイルAの行の最初の項とファイルBのデータの1行目とが一致するという事でいいのか ・その解釈の通りです。 (4)追加というのは  1,田中,100 ということでいいのか ・そうねですねファイルAのListの最後尾に100を追加するような感じです。 (5)ファイルBにデータがないファイルAの行はどのように処理をするか 比較を行い1つも一致する行がなかったら終了させます。 以上です。少し説明が至らなくて申し訳ありませんでしたっ

関連するQ&A

  • Javaの質問です。

    ファイルの中身を抽出し それをmysqlのテーブルの中の要素にそれぞれ登録する といった処理をおこなっています。 現在はArrayListでファイルの中身を一行ずつ抽出することができましたがそれぞれ 抽出した要素を適切なカラムにインサートする といった方法が分かりません。 例: 抽出するファイルの中身    INSERTするテーブルのカラムはidとnameがあります 001,山田              002,田中 現在はカンマ区切りで1つずつList内に格納できています。 このファイルの中身の001をidへ、山田をnameへとINSERTしたいです。

  • javaでの質問です

    public class Test{ //Aファイルの抽出 private static BufferedReader lstReader(BufferedReader lst1){ try{ String line = ""; while ((line = lst1.readLine()) != null){ String[] lins = line.split(","); Readbranch(lins); } }catch(IOException e){ System.out.println(e + "ファイルが存在しません"); } return null; } //ファイルBの抽出 private static BufferedReader lstReader2(BufferedReader lst2){ try{ String line2 = ""; while((line2 = lst2.readLine()) !=null){ String[] lins2 = line2.split(","); Readcommodity(lins2); } }catch(IOException e){ } return null; } //ファイルCの抽出 public static List<String> lstReader3(BufferedReader lst3){ String[] rcds = new String[3]; int i = 0; try{ String rcdline = null; i=0; while((rcdline = lst3.readLine()) !=null){ rcds[i] = rcdline; i = i+1; } Lists(rcds); }catch(IOException e){ } return shukei; } //抽出したCファイルの保持。 public static List<String> Lists(String[] rcds){ List<String> rcd = Arrays.asList(rcds); System.out.println(rcd.get(0)); //System.out.println(shukei); return null; } //抽出したAファイルの保持。 private static List<String> Readbranch(String[] line){ List<String> brlst = Arrays.asList(line); return null; } //抽出したBファイルの保持。 private static List<String> Readcommodity(String[] lins2){ List<String> comlst = Arrays.asList(lins2); return null; } //メイン public static void main(String[] args){ try { //Aファイルオープン BufferedReader lst1 = new BufferedReader(new FileReader("branch.lst")); lstReader(lst1); //Bファイルオープン BufferedReader lst2 = new BufferedReader(new FileReader("commodity.lst")); lstReader2(lst2);    //Cファイルオープン     BufferedReader lst3 = new BufferedReader(new FileReader("00000001.rcd"));     lstReader3(lst3); } catch (FileNotFoundException e1) { e1.printStackTrace(); } } } 現段階でできているコードは異常です。 目的はまずファイルA、Bを読み込み中の要素を取り出しておく、次にファイルCを読み込み同じように要素を取り出し ファイルA、ファイルBのと比較をし一致している要素があればファイルCの要素をそれぞれ一致したファイルA、Bの要素に追加したいのです。 例) ファイルAの要素 1,山田 2,佐藤 3,加藤 ファイルBの要素 Test,東京 Test2,埼玉 ファイルCの要素 1 Test 1000000 と各ファイルの中身がこのような場合 ファイルCの1行目の1とファイルAの1 が一致しているのでファイルCの3行目の1000000を追加します。 追加後のファイルA 1,山田,1000000 2,佐藤 3,加藤 そしてファイルCの二行目Test もまたファイルBのTestと一致しているのでファイルAと同じように3行目を加えます。 一致するものが無い場合は終了させます。 現状はA、B各ファイルをカンマ区切りで分割しListに入れています。ファイルCは1行ずつ配列にいれるところまではできましたが どのように比較をしたらいいのか分かりません どうかよろしくおねがいします

  • excelオートフィルタの検索条件をセルに入力したい

    以下のようなexcelのリストがあるとします。     A       B    C~ 1 佐藤・鈴木  Aタイプ 2 田中・山田  Bタイプ 3  佐藤     Aタイプ 4  田中     Cタイプ 5 山田・鈴木  Cタイプ A列の"田"が含まれる行を抽出したい場合 オートフィルタをかけ、オプションの抽出条件の指定で "田"を含む、で検索すれば良い、というのはわかります。 ですが、この動作をもうちょっと簡単にできないかと思っています。 具体的には、以下のようにセルに入力して検索・抽出するとはできないでしょうか。     A       B    C~ 1   田 2 3 4   A       B    C~ 6 田中・山田  Bタイプ 8  田中     Cタイプ 9 山田・鈴木  Cタイプ (1、2行目=検索用 3行目=空き 4行目以降=リスト) 過去の質問で、同じようにセルに入力して抽出する方法を 聞いていた方がいらっしゃったので参考にしようと思ったのですが 方法がVBAを使ったもので、VBAの知識がまったく無いために さっぱり理解することができませんでした。 何か良い方法がありましたら教えていただけないでしょうか。

  • 複数条件で数値を取り出す関数を教えて下さい。

    皆様のお知恵を貸して下さい。win7 Excel2010使用です。 ファイル1が A   B    C     D   E No.  氏名   月    タイプ 金額 1234 田中一郎 201310 1201 1234 田中一郎 201401 1201 1234 田中一郎 201401 1202 1237 山田太郎 201311 1201 1237 山田太郎 201312 1203 ファイル2が A   B     C    D     E    F          1201  1201   1201  1201          201310 201311 201312 201401 1234 田中一郎 10,000 15,000  20,000 12,000 1237 山田太郎 25,000 30,000  8,000  11,000 となっていて、月が201310~201406まで、 タイプが1201~1205まででタイプ毎に横に記載されています。(ファイル2) データ数は1000件程です。 ファイル1のE列へファイル2からNO.、月、タイプ全て一致する数値(10,000等)を抽出し表示したいです。 IFやSUMPRODUCT等で出来るかな?とやってみたのですが、私の知識不足で上手く行きません。 宜しくお願いいたします、

  • エクセルでこういうときは・・・?

    book1は   A B 1 1-1 山田 2 1-2 田中 3 1-1 佐藤 4 1-2 加藤 5 1-3 高橋 6 1-2 武田 7 1-3 岡田 と、なっております。この表から book2で 1-1 1-2 1-3 山田 田中 高橋 佐藤 田中 高橋 佐藤 加藤 高橋 #N/A 加藤 高橋 #N/A 武田 高橋 #N/A 武田 岡田 #N/A #N/A 岡田 と、いう表を作りたいのです。が、ご覧のとおりうまくいっておりません。(>_<) 上の表の検索はVLOOKを使っています。 なにかよい方法を教えてください。お願いします。

  • エクセル:別ファイルからの抽出

    エクセル:別ファイルからの抽出 エクセルにて、 あるファイルに A  B    C No 月    氏名    1 2010/11  佐藤 2 2010/10  山田 3 2011/12  田中 4 2010/10  田中 ・ ・ とあり、それを別ファイルで 2010/10とセルに入力してやると、B列の2010/10だけ抽出して 一覧にしてくれるようにしたいと考えております。 関数またはVBAにて処理する方法はありますでしょうか? A  B    C No 月    氏名    2 2010/10  山田 4 2010/10  田中 ・ ・ ※別ファイルにおいては順番は関係ないので、Noがなくても よいです。 恐縮ですが、お答え願えれば有難いです。

  • 2つのテキスト中身の違いを抽出

    2つのテキストの中身で一致しないテキストだけ抽出できるようなソフトってないでしょうか? 探してみましたが、同じ行(場所)にないといけないソフト(比較ソフト)ばかりでこちらの希望条件に合うようなソフトが見つからないので・・・。 例えば、下記の2つのテキストファイル(ファイルA とファイルB)でいうと テキストSとテキストZを抽出するような感じです。 よろしくお願いします。 ファイルA | ファイルB ----------- テキストA | テキストA(一致) テキストB | テキストB(一致) テキストD | テキストV(一致) テキストS | テキストZ テキストV | テキストD(一致)

  • テーブルの結合・・・

    教室テーブル id, class 1, A組 2, B組 3, C組 生徒テーブル id, name 1, 佐藤 1, 山田 2, 鈴木 3, 田中 3, 後藤 3, 加藤 という二つのテーブルがあります。 これらをLEFT JOINで結合したのですが。 A組, 佐藤 A組, 山田 B組, 鈴木 C組, 田中 C組, 後藤 C組, 加藤 となってしまいます。 これを同じ教室名でまとめて、 A組, 佐藤 山田 B組, 鈴木 C組, 田中 後藤 加藤 というように表示したいのです。 できればクエリだけで解決したいのですが・・・ よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Excel 2000と2002(XP)の違い?

    早速質問ですがよろしくおねがいしますm(_ _)m Excel2002(XP)である表を作りました。 2002の方ではちゃんと動いてくれるのですが、 Excel2000が入っている別のPCで開くと、 意図した通りに動いてくれません。 調べてみたところ、どうやら IF(A1>VLOOKUP(VLOOKUP(B1,リストその1!A1:C5,3),リストその2!A1:B6,2),"大きい","小さい") VLOOKUP(B1の値でリスト1を探して一致したらCの列の数値を持ってきて、 その値でリスト2を探して一致したらB列の値を持ってくる) で持ってきた数値とA1を比較して A1の方が大きいなら"大きい"違うなら"小さい"と表示する と言う式の部分がうまく動かないようです。(仮の式です) そこで質問なのですが、VLOOKUPの検索値をVLOOKUPで探すと言う上の式は Excel2000では対応していないのでしょうか?

  • エクセルでの質問でです

    Sheet2のA1からA5まで田中、鈴木、山田、佐藤、土屋、大橋とあり これを「リスト」と名前の定義をしています。 Sheet1のB5から =IF(ISERROR(MATCH(INDEX(リスト,ROW(A1)),$B$3:$J$3,0)),INDEX(リスト,ROW(A1)),"") とB10まで下にオートフィルをしています。 このB5からB10までを 「名前」と名前の定義をしています。 Sheet1のB3,F3,J3に入力規則のリストを使って 元の値は=OFFSET(名前,COUNTIF(名前,"<"""),0,COUNTIF(名前,">"""),1) となっています。 なのでB3のプルダウンで田中を選ぶとF3またはJ3では田中と空白を除く部分が表示されるように作ったのですが B5からB10まの式の中で$B$3:$J$3部分なのですが 連続していない範囲として検索をしたいのですが(プルダウンがあるのはB3,F3,J3だからC3やD3は含んでほしくない為) そういった事はできないのでしょうか? どうかお力添えをお願いいたします。