JavaでCSVファイルの部分的な読み込み方法とは?

このQ&Aのポイント
  • JavaでCSVファイルの部分的な読み込み方法について教えてください。
  • 質問者は現在、CSVファイルを全て読み込んでリストビューに表示していますが、2組のデータのみを表示したいそうです。
  • 質問者が現在使用しているコードも提示されています。
回答を見る
  • ベストアンサー

java CSVファイルの読み込みについて

初心者ですが、どうぞ宜しくお願いします。 CSVファイル内には3つのデータがあります。 date.csv ----------------------------------- "1組" "1,60点,80点,80点,70点,60点" "2,50点,55点,50点,80点,70点" "3,80点,80点,80点,95点,60点" "4,60点,65点,65点,60点,65点" "5,50点,65点,60点,65点,65点" "2組" "1,70点,70点,80点,80点,70点" "2,80点,65点,80点,85点,90点" "3,65点,65点,60点,50点,80点" "4,90点,60点,65点,60点,90点" "5,65点,80点,90点,90点,95点" "6,90点90点,65点,65点,95点" "7,75点,80点,90点,90点,75点" "3組" "1,85点,90点,90点,90点,85点" "2,90点,100点100点,100点,95点" "3,100点,80点,80点,100点,95点" "4,90点,65点,100点,100点,100点" "5,100点,100点,100点,70点,100点" ------------------------------------------ ファイル内容は上記のようになっているのですが、 2組のデータだけを読み込みたいのですが、 どのようにすれば部分的に読み込むことができますでしょうか? 現在は下記コードのように、全て取り込み1行ずつリストビューに表示しています。 このコードを改良して、2組のみをリストビューに表示したいのです。 try { // create reader InputStream input = new FileInputStream(path); InputStreamReader ireader=new InputStreamReader(input, "UTF-8"); CSVReader reader = new CSVReader(ireader,',','"',0); String[] csv; while ((csv = reader.readNext()) != null) { //アイテムの追加 list.add(csv[0]); } //アダプターの初期化 Date_lst.clear(); ArrayAdapter<String> lstadapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,Date_lst); ListView listView = (ListView)findViewById(R.id.listView1); //ListViewにアダプタ登録 listView.setAdapter(lstadapter); for(int i= 0; i < list.size(); i = i + 1){ Date_lst.add(list.get(i)); } } catch (FileNotFoundException e) { Log.e("ERROR", e.toString()); } catch (UnsupportedEncodingException e) { Log.e("ERROR", e.toString()); } catch (IOException e) { Log.e("ERROR", e.toString()); } } ご教授宜しくお願いいたします!

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

String str = "abc"; として strが"abc"かどうか ってif文わかります? それと同じですよ。 わからなければ…調べればすぐわかる内容です。

tokyo2199
質問者

お礼

if文の使い方はわかりますが、どういうふうに条件分岐させればよいのか・・・ 流れ的なものはわかったような気がします。 もう一度参考サイト等探してみようと思います。 ありがとうございました!

その他の回答 (1)

回答No.1

単純に「2組」が出てくるまでは表示しなきゃいいじゃん。 で「2組」が出てきたら表示して、 「3組」が出てきたら表示しない。 ↑のif文を付け加えればいいだけだと思うけど?

tokyo2199
質問者

お礼

ありがとうございます。 まさにそのようにすればよいのだと思います。 しかし、そのやり方がわからないのです・・・ >「2組」が出てきたら表示して、 「3組」が出てきたら表示しない。 このようにするための手順がわらないため、 if文の条件式が思いつきません。 ど素人のため煩わしい思いをさせてしまいますが、 サンプルや参考サイトなどありましたら教えて頂けると助かります。

関連するQ&A

  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • VCでJetによるCSVファイルの読み込み

    VCでJetによるCSVファイルを読み込む時、test_1=1,(2.0,3.0)で の”(2.0”を読み込めないです。”(”のせいかと思いますが、対処 方法を教えてください。 String^ test = gcnew String("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + csvdir + ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\""); ...... csvSelect = gcnew String("SELECT * FROM [" + csvname + "]"); ....... OleDbDataReader^ reader = cmd->ExecuteReader(); //読み込みデータ test_1=1,(2.0,3.0) testdata1 = (String ^)reader[0]->ToString(); ”test_1=1”を読み込める。 testdata2 = (String ^)reader[1]->ToString(); ”(2.0”を読み込めない testdata2 は””となります。 testdata3 = (String ^)reader[2]->ToString(); ”3.0)”を読み込める

  • android HashMapのValueが取得で

    当サイトでご援助下さった皆様、ありがとうございました。 皆様のおかげで、なんとか下記のようなコードを組むことができました。 処理内容はcsvファイルを読み込み、Tokenizerで分割してArrayListに入れています。そしてListの値をHashMapにputしているのですが、キーを指定してもvalueを取得できません。 テキストビューでvalueを取得しようとしたのですが(//確認 ■■の部分)、値が返ってきてないようです。 HashMapにはちゃんとセットされているとおもうのですが・・・ 下記がコードです。 たびたびの質問で恐縮ですが、皆様のお知恵をお借りできればと思います。 csvファイル ----------------- "kye1 , 良い" "kye2 , 普通" "kye3 , 悪い" ----------------- public class TestCsvActivity extends Activity { String path = "/sdcard/test.csv"; Spinner mSpinner1; TextView mTextView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ハッシュマップ mapSet(); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { //@Override public void onClick(View v) { //Activity終了 finishActivity(); } }); } private void mapSet(){ try { // create reader InputStream input = new FileInputStream(path); InputStreamReader ireader=new InputStreamReader(input, "UTF-8"); CSVReader reader = new CSVReader(ireader,',','"',0); String[] csv; List<String> lists = new ArrayList<String>(); while ((csv = reader.readNext()) != null) { StringTokenizer tok = new StringTokenizer(csv[0], ","); while (tok.hasMoreTokens()) { String s = tok.nextToken(); //アイテムの追加 lists.add(s); } HashMap<String ,String> map = new HashMap<String ,String>(); for(int i = 0; i < lists.size(); i = i + 2){ String key = lists.get(i); String value = lists.get(i+1); map.put(key,value); } // 確認 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ TextView tv = (TextView)findViewById(R.id.textView1); tv.setText( map.get("key1") ); //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ } } catch (FileNotFoundException e) { Log.e("ERROR", e.toString()); } catch (UnsupportedEncodingException e) { Log.e("ERROR", e.toString()); } catch (IOException e) { Log.e("ERROR", e.toString()); } } private void finishActivity(){ //Activity終了 finish(); return; } }

  • java equalsメソッドについて

    こんにちは。 java初心者ですがandroidを触ることになりました。 不可解なコードで大変恐縮ですが、ご教授願えれば幸いです。 スピナーでセレクトされた文字列と変数(A,B,C,D)の値を比較して条件分岐させたいのですが、 うまくいかず悩んでいます。 下記コード ■■■の部分になります。 1) スピナーに表示される文字列を取得し、変数itemqに代入。 2) 変数A(SONY)と変数itemq(?)を比較し、同じ文字列か比較する。 3) 同一の値であればitemqの値をテキストビューに値をセットする。 というようなものです。 equalsメソッドで比較しているのですが、この部分がどうやら間違っているようなのですが、 原因が全く分かりません。 無知な質問になりますが、どうぞ皆様宜しくお願いいたします。 またコードについての指摘や助言もおねがいします。 public class SampleActivity extends Activity { String path = "/sdcard/PriceSearch/topitems.csv"; static List<String> items = new ArrayList<String>(); static ArrayAdapter<String> adapter; private ListView listview; public String itemq; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Spinner spinner = (Spinner)findViewById(R.id.spinner1); // read csv file readCsvFile(spinner); spinner.setOnItemSelectedListener(new OnItemSelectedListener(){ public void onItemSelected(AdapterView<?> parent, View viw, int arg2, long arg3) { Spinner spinner = (Spinner)parent; String item = (String)spinner.getSelectedItem(); //トースト表示 Toast.makeText(Price_SearchActivity.this, item, Toast.LENGTH_LONG).show(); itemq = item; listread(); } //Spinnerのドロップダウンアイテムが選択されなかった時 public void onNothingSelected(AdapterView<?> parent) { }}); Button button1 = (Button)findViewById(R.id.btnend); button1.setOnClickListener(new View.OnClickListener() { //@Override public void onClick(View v) { //Activity終了 finish(); return; } }); } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ String A = "SONY"; String B = "TOSHIBA"; String C = "MITSUBISHI"; String D = "FUJITSU"; private void listread() { TextView tv = (TextView)findViewById(R.id.textView2); if (A.equals(itemq) ) { tv.setText(itemq); }else if (B.equals(itemq) ) { tv.setText("itemq"); }else if (C.equals(itemq) ){ tv.setText("itemq"); }else if (D.equals(itemq) ){ tv.setText("itemq"); }else { tv.setText("該当なし"); } } //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ private void readCsvFile(Spinner spinner) { try { // create reader InputStream input = new FileInputStream(path); InputStreamReader ireader=new InputStreamReader(input, "UTF-8"); CSVReader reader = new CSVReader(ireader,',','"',0); String[] csv; //スピナー用 ArrayAdapterを作成 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner); while ((csv = reader.readNext()) != null) { //ドロップダウンアイテムの追加 adapter.add(csv[0]); } //スピナーにadapterを設定 spinner.setAdapter(adapter); reader.close(); ireader.close(); input.close(); } catch (FileNotFoundException e) { Log.e("ERROR", e.toString()); } catch (UnsupportedEncodingException e) { Log.e("ERROR", e.toString()); } catch (IOException e) { Log.e("ERROR", e.toString()); } } }

    • ベストアンサー
    • Java
  • VCでJetによるCSVファイルの読み込み

    VCでJetによるCSVファイルを読み込む時、test_1=1,(2.0,3.0)で の”(2.0”を読み込めないです。”(”のせいかと思いますが、対処 方法を教えてください。 String^ test = gcnew String("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + csvdir + ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\""); ...... csvSelect = gcnew String("SELECT * FROM [" + csvname + "]"); ....... OleDbDataReader^ reader = cmd->ExecuteReader(); //読み込みデータ test_1=1,(2.0,3.0) testdata1 = (String ^)reader[0]->ToString(); ”test_1=1”を読み込める。 testdata2 = (String ^)reader[1]->ToString(); ”(2.0”を読み込めない testdata2 は””となります。 testdata3 = (String ^)reader[2]->ToString(); ”3.0)”を読み込める >>>回答者:edp3142 Extended Properties の右辺に IMEX=1 を追加するといけるかな? IMEX=1を追加してもだめでした。 テキストなので、以下のように設定していますが、問題がないでしょうか ;Extended Properties=\"text;HDR=Yes;IMEX=1;FMT=Delimited\" >>>回答者:redfox63 当方の環境では うまく取得できるようですが ・・・ >>>VC2005/2008/2010 デバッグ環境での検証ですけど >>>reader->IsDBNull(1) は falseを返すんでしょうか? >>>testdata2 = reader->GetString(1);でも同じ結果ですか VC2008デバッグ環境で行っていました。reader->IsDBNull(1) は1となっています。 testdata2 = reader->GetString(1);で追加すると、実行するとcatch(Exceptionまで 直接にいき、読み込みがそのままで終了します。

  • 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行ずつ配列にいれるところまではできましたが どのように比較をしたらいいのか分かりません どうかよろしくおねがいします

  • Java初心者です。どうぞお教えください。

    CSVファイルを読み込んで、ソートしてから、現在日時のファイル名でCSVで書き出します。以下のファイルでは、CSVで書き出せません。現在日時のファイル名をつける方法もよくわかりません。どうぞ教えてください。importは省略しています。 public class CSVdata { public static void main(String[] args) { String fname = " " ; ArrayList<String> list = new ArrayList<String>(); String save_filename = getFileName(); if(args.length>0) { fname = args[0]; } try { BufferedReader reader = new BufferedReader( new FileReader(fname) ); String Line = null; while ((Line = reader.readLine()) != null) { list.add(Line); } reader.close(); Collections.sort(list ); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(save_filename + ".csv"))); for (String string : list) { writer.println(string); } writer.close(); } catch (FileNotFoundException e) { System.out.println("ファイルがありません"); } catch (IOException e) { System.out.println("ファイルがありません"); } } public static String getFileName(){ Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); return sdf.format(d); } }

  • Java ApachePOIについて

    サーブレットとApachePOIについて質問です。 下記のソースで書き込んだセルをすべて黄色で塗りつぶしをしたいのですが、 ソースの書き方を教えてください。 以上、お願いします。 「ソース」 // 業務名前 String[] name4 = request.getParameterValues("gyoumuname"); for (int i = 0; i < name4.length; i++) { System.out.println(i + " " + name4[i]); name4[i] = new String(name4[i].getBytes("8859_1"), "UTF-8"); List outList=new ArrayList(); for (int i = 0; i < name4.length; i++) { outList.add(name4[i]); } for (int i = 0; i < outList.size(); i++) { Row row5 = sheet.getRow(8 + i); row5.getCell(3).setCellValue(new HSSFRichTextString(outList.get(i).toString())); } // 値を書き込んだエクセルを出力する FileOutputStream out = null; try { out = new FileOutputStream( "C:\\Users\\satou\\Desktop\\weekreport.xls"); workbook.write(out); } catch (IOException e) { System.out.println(e.toString()); } finally { try { out.close(); } catch (IOException e) { System.out.println(e.toString()); } } 以下省略。

  • javaについて

    このプログラムは文字を入力して、検索をかけてその検索にかかった秒数を表示するものですが、検索数を表示するのにはどうしたらいいでしょうか? import java.io.*; import java.net.*; public class Sample { public static void main(String[] args) { System.out.println("入力してください"); String keyword = getKeyword(); String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=" + keyword, "UTF-8"); double sec = getSearchSec(htmlSrc); if (sec > 0) { System.out.println("検索秒数は" + sec + "秒"); } else { System.out.println("検索結果0件"); } } private static String getKeyword() { String keyword = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); keyword = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } keyword = keyword.replaceAll(" ", "+"); return keyword; } private static String getHTMLSrc(String strURL, String charSet) { StringBuffer sb = new StringBuffer(); HttpURLConnection conn = null; BufferedReader br = null; try { URL url = new URL(strURL); conn = (HttpURLConnection)url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet); br = new BufferedReader(isr); String tmp = ""; while ((tmp = br.readLine()) != null) { sb.append(tmp); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (conn != null) { conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } private static double getSearchSec(String htmlSrc) { double sec = 0; String tmp = htmlSrc.replaceAll("<.+?>| ", ""); tmp = tmp.replaceAll(".*件-", ""); tmp = tmp.replaceAll("秒.*", ""); try { sec = Double.parseDouble(tmp); } catch (NumberFormatException e) { } return sec; } }

  • javaについて

    このプログラムは文字を入力して、検索をかけてその検索にかかった秒数を表示するものですが、検索数を表示するのにはどう書き換えますでしょうか? import java.io.*; import java.net.*; public class Sample { public static void main(String[] args) { System.out.println("入力してください"); String keyword = getKeyword(); String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=" + keyword, "UTF-8"); double sec = getSearchSec(htmlSrc); if (sec > 0) { System.out.println("検索秒数は" + sec + "秒"); } else { System.out.println("検索結果0件"); } } private static String getKeyword() { String keyword = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); keyword = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } keyword = keyword.replaceAll(" ", "+"); return keyword; } private static String getHTMLSrc(String strURL, String charSet) { StringBuffer sb = new StringBuffer(); HttpURLConnection conn = null; BufferedReader br = null; try { URL url = new URL(strURL); conn = (HttpURLConnection)url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet); br = new BufferedReader(isr); String tmp = ""; while ((tmp = br.readLine()) != null) { sb.append(tmp); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (conn != null) { conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } private static double getSearchSec(String htmlSrc) { double sec = 0; String tmp = htmlSrc.replaceAll("<.+?>| ", ""); tmp = tmp.replaceAll(".*件-", ""); tmp = tmp.replaceAll("秒.*", ""); try { sec = Double.parseDouble(tmp); } catch (NumberFormatException e) { } return sec; } }

    • ベストアンサー
    • Java

専門家に質問してみよう