我已经获得了一个逗号分隔值的.csv文件。它们按"2016-03-23,106.129997,25703500"
的顺序列为"date,price,volume"
。参数已经具有预设值,该预设值将由将验证代码的程序确定。当程序输入随机日期,例如:"2016-03-23"
。代码应输出.csv文件中的位置,该位置等于日期。当代码找到一个等于输入的日期时,它应该只返回该行的第二列,即价格为double。
到目前为止,我采取的步骤是:
1。读取包含.csv文件的参数。将.csv文件的第一列与date参数进行比较,并检查是否相等。 (.eqauls)。虽然我知道是否要生成此代码,但它将返回整个.csv文件。
2. 假设包含字符串的参数也是.csv文件,并将它们按照列进行比较。虽然这只是重现了第一个问题,但我不确定如何阅读两个.csv文件。
问题:
我需要返回一个双倍。虽然我的代码设置任何超出范围的值声明。在尝试转换它时:" Double类型中的方法
parseDouble(String)
不适用于参数(String[])
"如何精确定位.csv文件中的特定部分,而不仅仅是列,还有行。如果[1]和类似的确定列用于确定行的内容?
public static double getPrice(String stockFileName, String date) {
try {
BufferedReader br = new BufferedReader(new FileReader(stockFileName));
String line = "";
String unparsedFile = "";
Double Price;
while ((line = br.readLine()) != null) {}
br.close();
String[] Ans = unparsedFile.split(",");
for (String item: Ans) {
if (Ans[1].equals(date)) {
double aDouble = Double.parseDouble(Ans);
return Ans;
}
}
} catch(IOException ex) {
System.out.println("Error");
}
}
我认为应该做些什么:
创建一个for循环,生成.csv文件的每一行。将每一行转换为数组的字符串值,并让代码自行检查每一行(不生成整个列)是否等于日期。一旦确定该行,则返回该行的价格为[2]。
但是,如果参数已经设置为
String stockFileName
;我应该检查字符串中一行的[1]是否等于日期?如果是这样,只需返回该行的[2]?
答案 0 :(得分:0)
使用java库解析csv文件 (这样你就不必重新发明轮子)。 检查此jar文件 https://sourceforge.net/projects/opencsv/
一旦你的类路径中有jar, 您可以遍历CSV文件的每一行 如下,并在列上查找匹配 有日期并使用匹配行的价格列。
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println(nextLine[0] + nextLine[1] + "etc...");
}
答案 1 :(得分:0)
我认为你的问题可能是你正在阅读股票文件的所有行,但实际上并没有对它们做任何事情,因为你的while循环是空的。如果您需要行号,只需保留一个计数器,如果您需要整行,如果您需要对它进行任何操作,它将在返回之前处于变量行中
public static double getPrice(String stockFileName, String date) {
try {
BufferedReader br = new BufferedReader(new FileReader(stockFileName));
String line = "";
String unparsedFile = "";
Double Price;
while ((line = br.readLine()) != null) {
String[] Ans = line.split(",");
for (String item : Ans){
if(Ans[1].equals(date)){
double aDouble = Double.parseDouble(Ans[2]);
return aDouble;
}
}
}
br.close();
} catch (IOException ex) {
System.out.println("Error");
}
return null;
}