2016-06-29 3 views
0

У меня есть большой набор данных с текстовыми файлами (txt-Format). В TextFiles будут содержащий данные в этом формате:Как удалить некоторые столбцы из набора данных?

Name, Number, Timestamp, Sensordata1, Sensordata2, ... , Sensordata40 
Name, Number, Timestamp, Sensordata1, Sensordata2, ... , Sensordata40 
Name, Number, Timestamp, Sensordata1, Sensordata2, ... , Sensordata40 

Теперь мне нужно, чтобы удалить номер и Timestamp из каждой строки.

Мой код на данный момент:

try{ 
      // Open the file that is the first 
      // command line parameter 

      FileInputStream fstream = new FileInputStream("file.txt"); 

      // Get the object of DataInputStream 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String strLine; 

      //Read File Line By Line 
      while ((strLine = br.readLine()) != null) { 

       // Print the content on the console 
       System.out.println (strLine); 
      } 

      //Close the input stream 
      in.close(); 
     }catch (Exception e){//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 

Как я могу это сделать в Java?

+0

Somethin g, например 'String.split (',')', получить массив и удалить то, что вам нужно – Furtiro

ответ

1

Существует несколько способов сделать это в зависимости от того, сколько времени вы хотите тратить на обнаружение таких вещей, как столбцы и т. Д., Самым простым из которых является статическое вхождение столбцов, которые вы хотите удалить в своих примерах номер 1 и 2 по отношению к массиву , это может быть сделано в вашем примере, как это:

package stackquestions; 

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class StackQuestions { 


    public static void main(String[] args) { 
     try{ 
      // Open the file that is the first 
      // command line parameter 

      FileInputStream fstream = new FileInputStream("file.txt"); 

      // Get the object of DataInputStream 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String strLine; 

      //Read File Line By Line 
      while ((strLine = br.readLine()) != null) { 
       String[] data=strLine.split(","); 


       for(int i=0;i<data.length;i++){ 
        if(i!=1 && i!=2){ 
         System.out.println (data[i]); 
        } 

       } 
       // Print the content on the console 

      } 

      //Close the input stream 
      in.close(); 
     }catch (Exception e){//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 
} 
} 

Другой метод заключается в выявлении столбцов на основе того, является ли строка читается первая строка, расколоть первая линия (при условии, первая строка читается содержит и затем выполнить проверку индекса на каждой итерации, чтобы увидеть, к какому столбцу принадлежат данные.

+0

Также обратите внимание, поскольку вы используете файл с разделителями-запятыми, есть другие способы более формального чтения этого файла, структурированного, если вы инвестируете в создание более стабильная программа: [link] (http://www.mkyong.com/java/how-to-read-and-parse-csv-file-in-java/). Этот метод также позволил бы более гибко изменять, какие столбцы удалять по более поздним данным, не ссылаясь на статически введенные числа, такие как 1 и 2. В любом случае, надеюсь, что это помогло, и удачи :) – D3181

+0

Отличная ссылка! Большое спасибо! – basti12354

0

Если одинаковые значения всегда будут отображаться в одном столбце, то я уверен, что вы можете просто добавить все значения в ArrayList, зацикливать удаление значений, которые вам не нужны, а затем просто написать их вернуться к файлу.

Смежные вопросы