2016-11-11 5 views
0

私のコードの目的は、ユーザーの入力を要求することです、ユーザーはこの入力を指定し、私のコードは検索し、ユーザー入力がある行を見つけることです。.CSVファイルで特定の行を抽出するにはどうすればよいですか?

見つけたら、その行を何かに抽出するコードがあります(文字列配列?)ので、その内容の一部を編集できます。

私の問題は、これを行うために使用するコード/メソッド/クラスが不明だということです。

私は自分のコードをセットアップして、.CSVファイルを読み取り、それをタイプリストの文字列配列に出力するように設定しました。次に、配列を繰り返して、指定されたユーザー入力がファイル内にあるかどうかを調べます。

現時点では、私のコードでは見つかった場合にのみ表示されますが、その特定の行を抽出する方法は不明ですし、皆さんが私を助けてくれることを期待していました。

はここでボタンをクリックするだけで私のコードです:私は自分のベストを試みたが、私は今、私は行を抽出することを意図しています方法についての困惑

try{ 

     String strSearch = searchSerialField.getText(); 

     CSVReader reader = new CSVReader(new FileReader("test.txt"), ','); 
     List<String[]> myEntries = reader.readAll(); 
     reader.close(); 

     //Write to existing file 
     //CSVWriter writer = new CSVWriter(new FileWriter("test.txt"), ',',CSVWriter.NO_QUOTE_CHARACTER, "\r\n"); 

     //Iterate through my array to find the row the user input is located on 
     for (String[] line : myEntries) 
     { 
      ArrayList<String> newLine = new ArrayList<String>(); 
      for (String word : line) 
      { 
       if (word.contains(strSearch)) 
       { 
        //Need a method so I can find out what row my item is on 
        System.out.println("Found - Your item is on row: ..."); 

        //Code to extract row into something (String array?) so I can edit it's contents 

        //I then need to write the edited row back to it's original row 

       }else 
       { 
        System.out.println("Not found"); 
       } 
      } 
     } 

    }catch (IOException e) 
     { 
      System.out.println(e); 
     } 

、どのように私は行くことができますについてこれをする?

ありがとうございました。

答えて

0

必要なのはネストループではなく、Arrays.toStringメソッドです。

import java.io.FileReader; 
import java.io.IOException; 
import java.util.Arrays; 
import java.util.List; 

import com.opencsv.CSVReader; 


public class Test { 
    public static void main(String[] arg){ 
     search(); 
    } 
    public static void search(){ 
     try{ 

      String strSearch = "banana"; 

      CSVReader reader = new CSVReader(new FileReader("d:\\textfile.txt"), ','); 
      List<String[]> myEntries = reader.readAll(); 
      System.out.println(myEntries.size()); 
      reader.close(); 

      //Write to existing file 
      //CSVWriter writer = new CSVWriter(new FileWriter("test.txt"), ',',CSVWriter.NO_QUOTE_CHARACTER, "\r\n"); 

      //Iterate through my array to find the row the user input is located on 
      int i=1; 
      for (String[] line : myEntries) 
      { 

       String textLine = Arrays.toString(line).replaceAll("\\[|\\]",""); 
       System.out.println(textLine); 
        if (textLine.contains(strSearch)) 
        { 
         //Need a method so I can find out what row my item is on 
         System.out.println("Found - Your item is on row: ...:"+i); 

         //Code to extract row into something (String array?) so I can edit it's contents 

         //I then need to write the edited row back to it's original row 

        }else 
        { 
         System.out.println("Not found"); 
        } 
        i++; 
      } 

     }catch (IOException e) 
      { 
       System.out.println(e); 
      } 
    } 
} 
+0

これは私の質問に答えていません。特定の値がどの行にあるかを調べるにはどうすればよいですか?私の.CSVファイルでは、「バナナ」は3行目にあります。どのようなコードが実装されていなければならないのですか? – juiceb0xk

+1

信じられない私はこれのために投票した。 Kudoからstackoverflowへ。あなたの質問のために、私は自分の答えを更新しました。インデックスを追加するだけです。 – zawhtut

+0

偉大な、私の質問の一部に答えた。今、その行を何かに抽出して、それに付随する内容を編集することができます。すなわち、「バナナ、店」。私は 'banana、home'で終わることができるように、場所を編集するだけです。 – juiceb0xk

0

インデックスを数えるだけで達成できます。

String strSearch = searchSerialField.getText(); 
    CSVReader reader = new CSVReader(new FileReader("test.txt"), ','); 
    List<String[]> myEntries = reader.readAll(); 
    reader.close(); 

    for (int row = 0; row<myEntries.size(); row++){ 
     for (int column = 0; column< myEntries.get(row).length; column++){ 
      if(myEntries.get(row)[column].trim().equalsIgnoreCase(strSearch)){ 
       System.out.println("found - your item is on row " +row + ", column "+ column); 
      }    
     } 
    } 
-1
public static String[] getSpecificRowFromCsv(String filePath, int rowNum) { 
    List<String[]> fileData = null; 
    CSVReader reader = null; 
    try { 
     reader = new CSVReader(new FileReader(filePath)); 
     fileData = reader.readAll(); 
     reader.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }    

    return fileData.get(rowNum - 1); 
} 
関連する問題