过滤CSV文件并创建包含已过滤行的新文件

时间:2016-06-21 01:57:49

标签: windows csv powershell

我希望按描述列过滤行。我想过滤掉所有包含“免费WiFi”的行,然后创建一个csv文件并将其逗号分开。

HOTELID|AMENITYCODE|DESCRIPTION
722602|8|24-hour front desk
722602|109|Air conditioning
722602|23|Dry cleaning
722602|81|Fax/photocopying
722602|107|Free WiFi
723303|11|Fitness centre
723303|107|Free WiFi
723303|205|Fruits
723303|79|Hammam
723303|80|Heating
723303|44|Ironing service
723303|176|Kid meals

我可以使用哪些shell / Java / C#脚本来执行此操作并由Windows中的任务计划程序使用。

谢谢, 斯潘塞

2 个答案:

答案 0 :(得分:4)

您可以使用像这样的PowerShell管道

Import-Csv .\input.txt -Delimiter '|' | ? { $_.Description -notlike '*Free Wifi*' } | Export-Csv -NoTypeInformation processed.csv

其中input.txt是您的输入文件,processed.csv将包含没有WiFi内容的新CSV。

答案 1 :(得分:0)

在基本的Java中,我们可以使用以下代码:

package com.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.opencsv.CSVWriter;

public class Test {
    public static void main(String[] args) {
        String readFile = "C:\\test.txt";
        String line = "";
        String cvsSplitBy = "\\|";
        String filter1="Free WiFi";
        List<String[]> output = new ArrayList<String[]>();
        String writeFile = "C:\\testout.csv";

        try (BufferedReader br = new BufferedReader(new FileReader(readFile))) {
            output.add(0, br.readLine().split(cvsSplitBy));
            while ((line = br.readLine()) != null) {
                String[] input = line.split(cvsSplitBy);
                if(input[2].contains(filter1)) {
                    output.add(input);
                }  
            }

            File file = new File(writeFile);
            FileWriter outputfile = new FileWriter(file);
            CSVWriter writer = new CSVWriter(outputfile); 
            writer.writeAll(output); 
            writer.close();
            System.out.println("Program ended");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}