如何从数据集中删除一些列?

时间:2016-06-29 13:52:27

标签: java text-files bufferedreader

我有一个带有textfiles(txt-Format)的大型数据集。 文本文件包含以下格式的数据:

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

现在我需要从每一行中删除数字和时间戳。

我的代码:

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中执行此操作?

2 个答案:

答案 0 :(得分: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());
        }
}
}

另一种方法是根据正在读取的行是否是第一行来检测列,分割第一行(假设读取的第一行包含标题,然后在每次迭代时对索引执行检查以查看哪一列数据属于。

答案 1 :(得分:0)

如果相同的值始终显示在同一列中,那么我确定您可以将所有值添加到ArrayList,循环删除不需要的值,然后只需把它写回文件。