Java中的解析-意外引用
我在试着理解一段代码。不是我写的,我只是想让它发挥作用 它用于转换Java中的解析-意外引用,java,parsing,csv,Java,Parsing,Csv,我在试着理解一段代码。不是我写的,我只是想让它发挥作用 它用于转换.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(n
.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();
}
}
import java.io.*;
导入au.com.bytecode.opencsv.*;
公共类StockParser
{
公共静态void main(字符串[]args)抛出FileNotFoundException、IOException
{
CSVReader reader=newcsvreader(newfilereader(“/home/cloudera/Desktop/training.csv”);
字符串[]下一行;
字符串[]上一行;
String[]headernew=新字符串[reader.readNext().length+1];
CSVWriter writer=新的CSVWriter(新的文件编写器(“/home/cloudera/Desktop/final.csv”),“,”;
nextLine=reader.readNext();
for(int i=0;i
它通常可以工作,但有一个问题:输入文件的第一行是
打开,高,低,关闭,音量,调节关闭
后面跟着像
59.30,60.05,58.88,59.413373800,59.41
输出文件应该有相同的第一行,+action
,然后是类似的行,+BUY
或SELL
,但是当我运行此代码时,它不知何故丢失了
打开、高、低、关闭、音量、调节关闭、动作
行,,
接下来的几行看起来像
“59.64”、“60.26”、“58.88”、“59.83”、“3069100”、“59.83”、“买入”
这些引语是从哪里来的?我该怎么做才能摆脱它们 好的,EddyG为发现问题提出了正确的方向。
opencsv
jar有类CSVWriter
,它有一个不同的构造函数变体,其中是公共CSVWriter(Writer-Writer、char-separator、char-quotechar)
。摆弄quotechar
改进的东西。
来源:要简单回答您,请使用
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();
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException,
IOException{
CSVReader reader=新CSVReader(新文件读取器(
“training.csv”);
字符串[]下一行;
字符串[]上一行;
nextLine=reader.readNext();
String[]headernew=新字符串[nextLine.length+1];
CSVWriter writer=新CSVWriter(新文件编写器(
“final.csv”),,,,CSVWriter.NO_QUOTE_CHARACTER);
for(int i=0;i
这是对以下问题的回答:
这些引语是从哪里来的?我应该做些什么来摆脱它们
他们
中描述的构造函数允许指定引号字符。请尝试以下操作:
CSVWriter writer = new CSVWriter(new FileWriter("/home/cloudera/Desktop/final.csv"), ',', CSVWriter.NO_QUOTE_CHARACTER);
最后一个参数应禁止所有引用字符。是否在调试器中运行它?作为一个有经验的用户,您应该意识到至少缺少一个核心部分:值是由CSVWriter编写的;如果没有来源,我们怎么知道发生了什么?(猜测:CSV编写器不会将数字识别为数字,而是识别为字符串,因此它会在数字周围加上“”;或者反过来,CSV编写器希望确保任何数字在输出中显示为字符串)。你的代码,你告诉我们。@EddyG,我在Eclipse中运行过它。一般来说,我或多或少都有经验,但这是我第一次处理Java代码的经验之一。至于
CSVWriter
,这实际上是个好主意,谢谢。