首页 > 解决方案 > 用java删除数据CSV

问题描述

我在使用 php 下载 CSV 时遇到问题。我的 CSV 包含 http 标头,我需要在自动一个进程更新数据库后删除此信息。我还需要删除此 CSV 的列。

我不知道如何从 CSV 中删除我的 http 标头,也不知道如何删除此列。

我可以使用以下代码读取我的所有内容 CSV:

public static void main(String[] args) throws FileNotFoundException, IOException, 

CsvValidationException {
    String archCSV = System.getProperty("user.dir") + "\\MYLAR.csv";
    CSVReader csvReader = new CSVReader(new FileReader(archCSV));
    String[] fila = null;
    while((fila = csvReader.readNext()) != null) {
        System.out.println(fila[0]);
    }

    csvReader.close();
}

我得到了我所有的内容 CSV。在控制台我得到这个:

HTTP/1.1 200 OK
Date: Wed
Server: Apache/2.4.18 (Unix) OpenSSL/1.0.2g PHP/5.6.19 mod_perl/2.0.8-dev Perl/v5.16.3
Vary: Host
X-Powered-By: PHP/5.6.19
Pragma: public
Last-Modified: Wed
Cache-Control: no-store
Cache-Control: pre-check=0
Cache-Control: private
Content-Transfer-Encoding: none
Content-Disposition: attachment; filename="tarifa_general.csv
Content-Length: 1682234
Set-Cookie:
Content-Type: text/csv; charset=utf-8

CATEGORY_PATH;MANUFACTURER;ID_PRODUCT;PRODUCT;REFERENCE;REFERENCE_PARENT;STOCK;EAN13;SHORT_DESCRIPTION;PRICE_CUSTOMER
PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;1;"IMPRESORA EPSON LQ-2190";C11CA92001;;0;8715946459172;000003;910.33

我将如何删除我不想要的 http 标头和列?

感谢帮助

编辑; 分隔符

public static void main(String[] args) throws FileNotFoundException, IOException, CsvValidationException, CsvException {
    Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
    
    try (BufferedReader fileReader = Files.newBufferedReader(archCSV)) {

    // Skip HTTP Headers
    for (String line; (line = fileReader.readLine()) != null; )
        if (line.isEmpty())
            break; // Found end of HTTP Headers
    }

    CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
    try (BufferedReader br = Files.newBufferedReader(archCSV,  StandardCharsets.UTF_8);
                              
        CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser).build()) {
       
            List<String[]> rows = reader.readAll();

            for (String[] row : rows) {
                for (String e : row) {
                    System.out.format("%s ", e);
                }
                System.out.println();
            }
        }
}

输出

HTTP/1.1 200 OK 
Date: Wed, 04 Nov 2020 10:33:57 GMT 
Server: Apache/2.4.18 (Unix) OpenSSL/1.0.2g PHP/5.6.19 mod_perl/2.0.8-dev Perl/v5.16.3 
Vary: Host 
X-Powered-By: PHP/5.6.19 
Pragma: public 
Last-Modified: Wed, 04 Nov 2020 10:35:38 GMT 
Cache-Control: no-store, no-cache, must-revalidate 
Cache-Control: pre-check=0, post-check=0, max-age=0 
Cache-Control: private 
Content-Transfer-Encoding: none 
Content-Disposition: attachment  filename="tarifa_general.csv 
Content-Length: 1682234 
Set-Cookie
expires=Tue, 24-Nov-2020 10:33:57 GMT  Max-Age=1727899  path=/  domain=www.mylar.es  httponly 
Content-Type: text/csv  charset=utf-8 
 
CATEGORY_PATH MANUFACTURER ID_PRODUCT PRODUCT REFERENCE REFERENCE_PARENT STOCK EAN13 SHORT_DESCRIPTION PRICE_CUSTOMER 
PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES EPSON 1 IMPRESORA EPSON LQ-2190 C11CA92001  0 8715946459172 000003 910.33 

解决方案

public static void main(String[] args) throws FileNotFoundException, IOException, CsvValidationException, CsvException {
    Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
    

    CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
    try (BufferedReader br = Files.newBufferedReader(archCSV,  StandardCharsets.UTF_8);
                              
        CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser).build()) {
        
        // Skip HTTP Headers
        for (String line; (line = br.readLine()) != null; )
            if (line.isEmpty())
                break; // Found end of HTTP Headers
       
            List<String[]> rows = reader.readAll();

            for (String[] row : rows) {
                for (String e : row) {
                    //System.out.format("%s ", e);
                    System.out.println(row[2]);
                }
                System.out.println();
            }
        }
}

标签: javaphpcsvhttp

解决方案


HTTP 标头以空行结尾,因此要跳过 HTTP 标头,请使用 aBufferedReader并继续阅读,直到找到空行,然后将阅读器交给CSVReader.

至于“删除”一列,则无需,读取数据时忽略该列即可。

Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
try (BufferedReader fileReader = Files.newBufferedReader(archCSV)) {
    
    // Skip HTTP Headers
    for (String line; (line = fileReader.readLine()) != null; )
        if (line.isEmpty())
            break; // Found end of HTTP Headers
    
    // Read CSV content
    try (CSVReader csvReader = new CSVReader(fileReader)) {
        String[] fila = null;
        while((fila = csvReader.readNext()) != null) {
            String col1 = fila[0];
            String col2 = fila[1];
            // Skip ("delete") column 3
            String col4 = fila[3];
            
            // code here
        }
    }
}

推荐阅读