【问题标题】:Filter CSV file and create a new file with filtered rows过滤 CSV 文件并创建一个包含过滤行的新文件
【发布时间】:2016-10-22 09:51:29
【问题描述】:

我希望按描述列过滤行。我想过滤掉所有包含“免费 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 中的任务调度程序使用。

谢谢, 斯宾塞

【问题讨论】:

  • 注意 S.O. [shell] 标签的定义。您可能想要[batch-file][Powershell]。祝你好运。

标签: windows csv powershell


【解决方案1】:

您可以使用这样的 PowerShell 管道

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

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

【讨论】:

  • “NoTypeInformation”不是默认设置让我每天都感到难过。现在修复它是一项重大更改,MS 不太可能发布重大更改。
  • 是的,也许它是通过设计有一个很好的例子/理由有 $PSDefaultParameterValues :)
【解决方案2】:

在基本 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();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    相关资源
    最近更新 更多