[英]Parsing in Java - unexpected quotes
我正在嘗試理解一段代碼。 我沒有寫它,我只是想使其工作。
這意味着要轉換.csv
文件。 代碼是這樣的:
import java.io.*;
import au.com.bytecode.opencsv.*;
public class StockParser
{
public static void main(String[] args) throws FileNotFoundException, IOException
{
CSVReader reader = new CSVReader(new FileReader("/home/cloudera/Desktop/training.csv"));
String [] nextLine;
String [] previousLine;
String [] headernew = new String [reader.readNext().length +1];
CSVWriter writer = new CSVWriter(new FileWriter("/home/cloudera/Desktop/final.csv"), ',');
nextLine = reader.readNext();
for (int i = 0; i < nextLine.length;i++)
{
headernew[i] = nextLine[i];
}
headernew[headernew.length-1] = "action";
writer.writeNext(headernew);
previousLine = reader.readNext();
while ((nextLine = reader.readNext()) != null)
{
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + " etc...");
headernew = new String [nextLine.length + 1];
for (int i = 0; i < headernew.length-1;i++)
{
headernew[i] = nextLine[i];
}
if (Double.parseDouble(previousLine[4]) < Double.parseDouble(nextLine[4]))
{
headernew[headernew.length-1] = "SELL";
}
else
{
headernew[headernew.length-1] = "BUY";
}
writer.writeNext(headernew);
previousLine = nextLine;
}
reader.close();
writer.close();
}
}
它通常可以工作,但是有一個問題:輸入文件的第一行是
開,高,低,關,成交量,調整關
跟着像
59.30,60.05,58.88,59.41,3373800,59.41
輸出文件應具有相同的第一行+ action
,然后具有相似的行+ BUY
或SELL
,但是當我運行此代碼時,它將以某種方式丟失
打開,高,低,關閉,音量,調整關閉,操作
行,接下來的行看起來像
“ 59.64”,“ 60.26”,“ 58.88”,“ 59.83”,“ 3069100”,“ 59.83”,“購買”
報價是從哪里來的,我該怎么做才能刪除它們?
要簡單地回答您,請使用
CSVWriter writer = new CSVWriter(new FileWriter(
"/home/cloudera/Desktop/final.csv"), ',',CSVWriter.NO_QUOTE_CHARACTER);
但是您的代碼中幾乎沒有其他問題,我試圖改正我的假設。
public static void main(String[] args) throws FileNotFoundException,
IOException {
CSVReader reader = new CSVReader(new FileReader(
"training.csv"));
String[] nextLine;
String[] previousLine;
nextLine = reader.readNext();
String[] headernew = new String[nextLine.length + 1];
CSVWriter writer = new CSVWriter(new FileWriter(
"final.csv"), ',', CSVWriter.NO_QUOTE_CHARACTER);
for (int i = 0; i < nextLine.length; i++) {
headernew[i] = nextLine[i];
}
headernew[headernew.length - 1] = "action";
writer.writeNext(headernew);
previousLine = reader.readNext();
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + " etc...");
headernew = new String[nextLine.length + 1];
for (int i = 0; i < headernew.length - 1; i++) {
headernew[i] = nextLine[i];
}
if (Double.parseDouble(previousLine[4]) < Double
.parseDouble(nextLine[4])) {
headernew[headernew.length - 1] = "SELL";
} else {
headernew[headernew.length - 1] = "BUY";
}
writer.writeNext(headernew);
previousLine = nextLine;
}
reader.close();
writer.close();
}
這是對以下問題的答案:
報價是從哪里來的,我該怎么做才能刪除它們?
CSVWriter文檔中描述的構造函數允許指定引號字符。 請嘗試以下操作:
CSVWriter writer = new CSVWriter(new FileWriter("/home/cloudera/Desktop/final.csv"), ',', CSVWriter.NO_QUOTE_CHARACTER);
最后一個參數應禁止所有引號字符。
好的,EddyG建議了找到問題的正確方向。 opencsv
jar具有Class CSVWriter
,並且具有不同的構造函數變體,其中包括public CSVWriter(Writer writer,char separator,char quotechar)
。 擺弄quotechar
改善情況。 來源: opencsv文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.