Я решаю последнюю ошибку в моем приложении, связанную с выводом в мой файл CSV. Мое приложение запускается два раза в день с отметками времени и двумя различными значениями. Проблема заключается в том, что при запуске приложения доступно только одно из этих двух значений. Поэтому мне нужно иметь возможность распечатывать одну строку в CSV каждый день, где в первый раз ставится дата, печатается 1-е значение, а 2-е значение печатается как #Empty (или оставляется пустым). Затем при втором запуске время и 1-е значение пропускаются, а 2-е значение перезаписывается на новое значение.
Вот изображение, показывающее, что у меня есть и что я хочу:
У меня есть:
I want:
Вот метод, который я использую для генерации тела таблицы данных (заголовки в порядке). Я добавил комментарии к строке, чтобы уточнить мои функции как можно лучше:
//Put into proper array based on when data was pulled
public void createCSV() throws IOException {
makeCSV(); //Method call to build file
EST est = new EST();
est.getEST(); //Method call to get current time in EST
//Fill in value at market open
if(est.marketOpen == true) { //Flag to see which column the parsed data (single value) should be
o_value = stock;
c_value = "#Empty";
}
//Fill in value at market close
else if (est.marketClose == true){
o_value = "#Empty";
c_value = stock;
}
//Import arrays
est.getDate(); //est.getDate() pulls the date stamp for today's date
Scanner scanner = new Scanner(fid); //fid is the name of the file
//File should always have next line due to written headers
//Ensure date is only printed on 1 line
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
if(!line.contains(est.dx)) { //est.dx is the string form of today's date stamp
Files.write(path, est.dx.getBytes(), StandardOpenOption.APPEND);
Files.write(path, ",".getBytes(), StandardOpenOption.APPEND);
}
else{
Files.write(path, "\n".getBytes(), StandardOpenOption.APPEND);
}
}
//Handle commas in stock values
String input1 = appendDQ(o_value);
String input2 = appendDQ(c_value);
//Don't write empty to data file for open data
//If program is on schedule, can't have close data without open data
if(!input1.equals("#Empty")) {
Files.write(path, input1.getBytes(), StandardOpenOption.APPEND);
Files.write(path, ",".getBytes(), StandardOpenOption.APPEND);
Files.write(path, input2.getBytes(), StandardOpenOption.APPEND);
}
else {
}
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
String parser = "#Empty";
if(line.contains(parser) && input2 != parser ) {
Files.write(path, input2.getBytes(), StandardOpenOption.APPEND);
Files.write(path, "\n".getBytes(), StandardOpenOption.APPEND);
}
}
scanner.close();
System.out.println("Stock data sucessfully written to file.");
}