我正在尝试在读取和提取数据后自动生成的新CSV中写入数据。然而,总是只写一个记录,它没有我想要的格式。我希望列中的数据,如果我有id,制造商,product_name,价格,这些信息应该在不同的列中,但是我的结果是:

然而,在为其他人开发的其他脚本MDB中,当转换此CSV时,他的格式是:
51645A-C 11.86 21 INFOWORK CARTUCHO COMPATIBLE CON HP 45 51645A NEGRO
http://recursos.infowork.es/img/000/084/000084322.jpg
C13T04014020-C 1.01 3 INFOWORK CARTUCHO COMPATIBLE CON EPSON C62-CX3200 NEGRO http://recursos.infowork.es/img/000/084/000084593.jpg我需要这种Java格式,让我的进程自动更新我的数据库。为什么?现在,我使用一个脚本进行转换,然后需要重新保存结果。
我的实际代码是:
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()) {
String col1 = "";
String col2 = "";
String col3 = "";
String col4 = "";
String col5 = "";
String col6 = "";
String col7 = "";
String col8 = "";
// Skip HTTP Headers
for (String line; (line = br.readLine()) != null; )
if (line.isEmpty())
break; // Found end of HTTP Headers
String[] fila = null;
while((fila = reader.readNext()) != null) {
col1 = fila[0]; //path
col2 = fila[1]; //fabricante
col3 = fila[2]; //ID_PRODUCT
col4 = fila[3]; // producto
col5 = fila[4]; //referencia
col6 = fila[6]; //stock
col7 = fila[7]; //EAN13
col8 = fila[9]; //PRECIO
File file = new File("MYLAR2.CSV");
try {
// create FileWriter object with file as parameter
FileWriter outputfile = new FileWriter(file);
// create CSVWriter object filewriter object as parameter
CSVWriter writer = new CSVWriter(outputfile);
// adding header to csv
String[] header = { "Fabricante", "ID_PRODUCT", "PRODUCTO", "REFERENCIA", "STOCK", "EAN13", "PRECIO"};
writer.writeNext(header);
String[] data1 = new String[fila.length];
// add data to csv
for(int i = 1; i<fila.length; i++){
data1[i] = fila[i];
}
writer.writeNext(data1);
/*String[] data2 = { "Suraj", "10", "630" };
writer.writeNext(data2); */
// closing writer connection
writer.close();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// code here
}
}
}我写的转换结果只有一个结果,当CSV有很多结果时。
更新
原始文件Mylar
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: 6bc890cb7b5704cff62e4f70e6f2fe91=xjqG7DAXpIyCS%2FBGEFwnApzYUWiwlkMqmx9ULY%2FdgW%2FMqfHk4mNo67rgSQp10%2FacRlHCinJUyWAv0B%2FInmAGaiyJ0ro5yf2yNl1O9tKx50M%3D000074; 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
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;3;"IMPRESORA EPSON LX-1170 II";C11C641001;;0;8715946316963;000008;428.91
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;4;"IMPRESORA EPSON FX-890 II";C11C524025;;0;8715946333137;000012;595.29
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;5;"IMPRESORA EPSON FX-2190";C11C526022;;0;8715946204420;000013;714.87
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;6;"IMPRESORA EPSON LQ-680 PRO";C11C376125;;0;8715946333205;000021;664.98
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;8;"IMPRESORA EPSON LQ-630";C11C480019;;0;8715946538068;000025;498.67
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;11;"IMPRESORA EPSON LQ-690";C11CA13041;;0;8715946429939;000091;583.8
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;12;"IMPRESORA EPSON LX-350";C11CC24031;;0;8715946502939;000092;171.23
"PERIFÉRICOS > SCANNERS > EPSON";EPSON;17;"SCANNER EPSON WORKFORCE DS-7500N";B11B205331BT;;0;8715946510705;000157;1063.95
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > ACCESORIOS";EPSON;18;"TRACTOR PUSH/PULL ( FX-2190 ) C12C800212*";C12C800212;;0;0;000230;59.54
"PERIFÉRICOS > TERMINAL PUNTO VENTA (TPV) > IMPRESORAS TICKETS";EPSON;19;"IMPRESORA EPSON TMU-950 PARALELO BLANCA";C31C176252LG;;0;8715946367842;000248;512.8
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > LASER";EPSON;21;"IMPRESORA EPSON ACULASER COLOR C2800N";C11CA09001BZ;;0;8715946403878;000251;294.51
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > LASER";EPSON;22;"IMPRESORA EPSON EPL-6200N";C11C533011BR;;0;9314020599675;000254;168.41
"PERIFÉRICOS > SCANNERS > EPSON";EPSON;24;"SCANNER EPSON PERFECTION V500 OFFICE ADF";B11B189081;;0;8715946448664;000257;194.32
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > LASER";EPSON;25;"IMPRESORA EPSON ACULASER M 7000N";C11CB61011;;0;8715946311173;000264;0
"PERIFÉRICOS > SCANNERS > EPSON";EPSON;26;"SCANNER EPSON GT-S55";B11B209301BT;;0;8715946490922;000266;381.92
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;51;"IMPRESORA EPSON LQ-350";C11CC25001;;0;8715946521886;000854;188.01
"CONSUMIBLES > ALMACENAMIENTO > MEMORIAS USB / PENDRIVES";KINGSTON;68;"PENDRIVE KINGSTON 32GB USB 2.0";32GB;;0;740617297737;001439;3.29
"CONSUMIBLES > ALMACENAMIENTO > MEMORIAS USB / PENDRIVES";;77;"PENDRIVE INTEGRAL 64GB* USB 2.0";"INFD64GBPASBLS PEN64GB";;0;5055288427822;001460;7.34
"CONSUMIBLES > ALMACENAMIENTO > MEMORIAS USB / PENDRIVES";TOSHIBA;79;"PENDRIVE TOSHIBA 16GB USB 2.0";"THN U202";;0;4047999400226;001498;3.91
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > BROTHER > ACCESORIOS";BROTHER;81;"DISCO DURO BROTHER 10 GB PARA HL4000CN";HD40CL;;0;4977766603645;001677;411.4与使用mdb脚本开发的其他脚本相比,脚本的结果是:
C11CA92001 910.33 0 MYLAR IMPRESORA EPSON LQ-2190
C11C641001 428.91 0 MYLAR IMPRESORA EPSON LX-1170 II
C11C524025 595.29 0 MYLAR IMPRESORA EPSON FX-890 II
C11C526022 714.87 0 MYLAR IMPRESORA EPSON FX-2190
C11C376125 664.98 0 MYLAR IMPRESORA EPSON LQ-680 PRO
C11C480019 498.67 0 MYLAR IMPRESORA EPSON LQ-630
C11CA13041 583.8 0 MYLAR IMPRESORA EPSON LQ-690
C11CC24031 171.23 0 MYLAR IMPRESORA EPSON LX-350
B11B205331BT 1063.95 0 MYLAR SCANNER EPSON WORKFORCE DS-7500N
C12C800212 59.54 0 MYLAR TRACTOR PUSH/PULL ( FX-2190 ) C12C800212*
C31C176252LG 512.8 0 MYLAR IMPRESORA EPSON TMU-950 PARALELO BLANCA
C11CA09001BZ 294.51 0 MYLAR IMPRESORA EPSON ACULASER COLOR C2800N
C11C533011BR 168.41 0 MYLAR IMPRESORA EPSON EPL-6200N
B11B189081 194.32 0 MYLAR SCANNER EPSON PERFECTION V500 OFFICE ADF
C11CB61011 0 0 MYLAR IMPRESORA EPSON ACULASER M 7000N
B11B209301BT 381.92 0 MYLAR SCANNER EPSON GT-S55
C11CC25001 188.01 0 MYLAR IMPRESORA EPSON LQ-350
32GB 3.29 0 MYLAR PENDRIVE KINGSTON 32GB USB 2.0
INFD64GBPASBLS PEN64GB 7.34 0 MYLAR PENDRIVE INTEGRAL 64GB* USB 2.0
THN U202 3.91 0 MYLAR PENDRIVE TOSHIBA 16GB USB 2.0
HD40CL 411.4 0 MYLAR DISCO DURO BROTHER 10 GB PARA HL4000CN
FAX2845 159.2 0 MYLAR FAX BROTHER 2845 LASER CON AURICULAR我需要这种格式(up)
的实际代码结果是:
Fabricante,"ID_PRODUCT","PRODUCTO","REFERENCIA","STOCK","EAN13","PRECIO"
,"MANUFACTURER","ID_PRODUCT","PRODUCT","REFERENCE","REFERENCE_PARENT","STOCK","EAN13","SHORT_DESCRIPTION","PRICE_CUSTOMER"
,"EPSON","1","IMPRESORA EPSON LQ-2190","C11CA92001","","0","8715946459172","000003","910.33"
,"EPSON","3","IMPRESORA EPSON LX-1170 II","C11C641001","","0","8715946316963","000008","428.91"
,"EPSON","4","IMPRESORA EPSON FX-890 II","C11C524025","","0","8715946333137","000012","595.29"
,"EPSON","5","IMPRESORA EPSON FX-2190","C11C526022","","0","8715946204420","000013","714.87"
,"EPSON","6","IMPRESORA EPSON LQ-680 PRO","C11C376125","","0","8715946333205","000021","664.98"
,"EPSON","8","IMPRESORA EPSON LQ-630","C11C480019","","0","8715946538068","000025","498.67"
,"EPSON","11","IMPRESORA EPSON LQ-690","C11CA13041","","0","8715946429939","000091","583.8"
,"EPSON","12","IMPRESORA EPSON LX-350","C11CC24031","","0","8715946502939","000092","171.23"解释
我不能传递公司分销商的完整CSV文件,我已经传递了一些示例行,这些行应该给出的概念,整个文件是什么样的。不管怎样,我会尽量让它更清楚..。更新后的第一个示例是我的原始mylar文件。有一位前开发人员用MDB编写了一个脚本,该脚本将其转换为第一个示例,它是从分发服务器到第二个示例的原始代码.最后,使用我当前的java脚本,我得到了第三个示例。我需要把自己作为第二个例子。我有西班牙语和英语术语,因为供应商的CSV就是这样来的.我需要做的是用这些CSV自动更新数据库,但为此,我必须转换它们,以获得脚本中的数据,但保留CSV,就像MDB脚本中的示例一样。
发布于 2020-11-06 09:55:06
因此,csv有一个标头,而mdb没有,而后者似乎是正常的文本文件。下面的代码同时写入文本文件和csv文件,如果有什么我不理解的东西,您可以自定义它。
Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
File fileCsv = new File("MYLAR2.CSV");
File fileTxt = new File("MYLAR2.txt");
try (BufferedReader br = Files.newBufferedReader(archCSV, StandardCharsets.UTF_8);
CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser).withSkipLines(1).build();
FileWriter outputfile = new FileWriter(fileCsv);
CSVWriter writer = new new CSVWriter(outputfile, ' ', ' ', ' ', ICSVWriter.DEFAULT_LINE_END)) { //mind the single space between the simgle quotes '*space*'
// Skip HTTP Headers
for (String line; (line = br.readLine()) != null;)
if (line.isEmpty())
break; // Found end of HTTP Headers
List<String[]> toCsv = new ArrayList<>();
List<String[]> filas = reader.readAll(); // use this if the file is not gigantic
for(String[] line : filas) {
if(line.length == 0)
continue;
String[] app = new String[5];
for(int i = 0; i < line.length; i++) {
app[0] = line[4];
app[1] = line[9];
app[2] = line[6];
app[3] = "MYLAR";
app[4] = line[3];
}
toCsv.add(app);
}
writer.writeAll(toCsv); // only one IO Operation
}
}更新的输出
C11CA92001 910.33 0 MYLAR IMPRESORA EPSON LQ-2190
C11C641001 428.91 0 MYLAR IMPRESORA EPSON LX-1170 II
C11C524025 595.29 0 MYLAR IMPRESORA EPSON FX-890 II
C11C526022 714.87 0 MYLAR IMPRESORA EPSON FX-2190
C11C376125 664.98 0 MYLAR IMPRESORA EPSON LQ-680 PRO
C11C480019 498.67 0 MYLAR IMPRESORA EPSON LQ-630 https://stackoverflow.com/questions/64697026
复制相似问题