java - 用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();
}
}
}
解决方案
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
}
}
}
推荐阅读
- javascript - 使用 jQuery 或 javascript,我想知道 html 表的每列(1-4)中有多少个元素 500?我该怎么做?
- sql - Oracle 完全联接中的重复项
- c++ - 如何确保从文件流式传输的数据中正确缩进。看看我的代码,它没有给出想要的结果
- scala - 运行 Scala 脚本时的 Main 对象是什么?
- docker - ASP.Net Core 5.0 Docker - windows/amd64 10.0.17134 没有匹配的清单
- javascript - 如何在不使用“__dirname”或“import.meta.url”的情况下获取 Node.js 中当前模块的目录?
- javascript - 如何从字符串变量cardLabel中删除除{Group}和{Desc}之外的所有内容并在javascript中在它们之间添加空格?
- python - 如何以 django 形式获取 TypedChoiceField 的值(不是键)?
- python - 下载 zip 文件时出错 TensorFlow Keras
- python - 在 Python 中交换列表中的值