2016-11-11 2 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 «банан» находится в третьей строке. Какой код мне нужно реализовать, чтобы узнать, в какой строке он включен? – juiceb0xk

+1

Невероятно, что я проголосовал за это. Kudo для stackoverflow. На ваш вопрос я обновил свой ответ. Просто нужно добавить индекс. – zawhtut

+0

Отлично, это ответ на часть моего вопроса. Теперь, чтобы извлечь эту строку во что-то, чтобы я мог редактировать сопроводительное содержимое. т. е. «банан, магазин». Я бы хотел только отредактировать местоположение, чтобы закончить с помощью «банана, дома». – 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); 
} 
Смежные вопросы