So funktioniert JustAnswer:
  • Fragen Sie einen Experten
    Tausende Experten in über 200 Kategorien.
  • Erhalten Sie eine professionelle Antwort
    Per E-Mail oder sofortiger Benachrichtigung, während Sie auf unserer Website warten.
    Stellen Sie ggf. weitere Anschlussfragen.
  • 100%ige Zufriedenheit garantiert
    Bewerten Sie die erhaltene Antwort.
Stellen Sie Ihre Frage an Dr-Ing-Singer.
Dr-Ing-Singer
Dr-Ing-Singer, Dr. -Ing.
Kategorie: Programmierung
Zufriedene Kunden: 49
Erfahrung:  Master of Engineering and Computer Science und Diplomingenieur der Luft- und Raumfahrttechnik
61769379
Geben Sie Ihre Frage in der Kategorie Programmierung hier ein
Dr-Ing-Singer ist jetzt online.

Hallo, mein Kollege Udo Baumgardt hat mich auf diese Seite

Kundenfrage

Hallo, mein Kollege Udo Baumgardt hat mich auf diese Seite aufmerksam gemacht.
Wir haben folgendes Problem.
Wir müssen aus einer CSV-Datei, in die fortlaufend neue Datenreihen geschrieben werden, jeweils die letzten, aktuellen 5 Reihen auslesen können. Dabei sollen die Daten auf der Standardausgabe ausgegeben und von einer weiteren Klasse als double/int verwendet werden können. Mir liegt eine Klasse vor, dass genau das leisten soll. Wenn ich es jedoch ausführe, gibt es mir lediglich 0.00 aus (catch). Hier die entsprechende Klasse:

package singlejartest;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

import com.dukascopy.api.*;

/**
* This is strategy sample, which demonstrates CSV file parsing.
* When strategy starts, it takes file by a given path and parses it. It looks in
* each line and search for second occurrence of "," symbol. It takes all characters
* to the left from "," symbol till space symbol accrues. Converts value to Double
* and stores it in Array. After that it takes all gathered values prints out on console.
*
**/

/*
* When strategy loader sees this annotation for strategy class it asks user if he wants
* to allow the strategy full access. If such acceptance receives strategy classes, they
* are loaded with full access policy allowing to read/write any files, use sockets etc.
* Always try to avoid using this annotation, if only need to read/write to file - you
* have full access to "~/My Documents/My Strategies/files" folder. In this folder you
* can read or write any file without requesting the full access.
*
* Because "~\My Documents\My Strategies\files" folder dosen't requires any additional access.
* In this case you should put your files in directory similar to this on
* "C:\Documents and Settings\john.smith\My Documents\My Strategies\files".
* Thus there is no needs to use @RequiresFullAccess annotation. *
*/
@RequiresFullAccess
public class GetCSVData implements IStrategy {

private IConsole console;

public void onStart(IContext context) throws JFException {
this.console = context.getConsole();

//putting out all data to console
try {
//Iterating thru parsed array
for(Double d : parse("C:/log.csv")){
this.console.getOut().println(d);

}
} catch (Exception e) {
this.console.getErr().println(e.getMessage());
}

}

public void onAccount(IAccount account) throws JFException {
}

public void onMessage(IMessage message) throws JFException {
}

public void onStop() throws JFException {
}

public void onTick(Instrument instrument, ITick tick) throws JFException {

}

public void print(String string) {
this.console.getOut().println(string);
}

public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
}

/**
* Takes StringTokenizer as input and returns second token
* If token dosen't exists return String "0"
*
* @param StringTokenizer st
* @return String token
*/
private static String secondToken(StringTokenizer st){
try{
st.nextToken();
return st.nextToken();
}catch (NoSuchElementException nsee){
//if in token String is no token symbols
//we just return 0
return "0";
}
}

/**
* Parse file by given path in directory tree. Takes from file each strokes
* second token and place it as Double into ArrayList
*
* @param path - file path
* @return ArrayList of Doubles
* @throws IOException
*/
private static List parse(String filePath) throws IOException{

String path = filePath;

List prices = new ArrayList();
File file = new File(path);

BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String line = null;

//read each line of text file
while((line = bufRdr.readLine()) != null)
{
StringTokenizer st = new StringTokenizer(line,",");

//get token and store it as Double in the array
prices.add(Double.valueOf(secondToken(st)));

}
//close the file
bufRdr.close();

return prices;
}
}


Hilfe dringend erbeten ;-)

Gruss
Stephan Feldhoff
Gepostet: vor 5 Jahren.
Kategorie: Programmierung
Experte:  Dr-Ing-Singer hat geantwortet vor 5 Jahren.
Sehr geehrter Ratsuchender,

ich habe die Vermutung, dass die log.csv Datei entweder Leerzeilen in den letzten 5 aktiven Zeilen aufweist, Leerstellen zu Beginn der Zeilen oder dass "st" entweder nicht richtig deklariert oder gar nicht erst beschrieben wird. Um das Problem zu lösen bitte verwenden Sie das Überwachungsfenster und überprüfen Sie die Funktionalität Ihrer Klasse Zeile für Zeile.

Mit freundlichen Grüßen,
Csaba Singer
Experte:  Dr-Ing-Singer hat geantwortet vor 5 Jahren.

Sehr geehrter Ratsuchender,

 

Ich hoffe Ihnen mit meinen Ausführungen weitergeholfen zu haben. Soweit Sie keine weiteren Nachfragen haben, bitte ich höflich meine Antwort zu akzeptieren indem Sie auf das grüne Feld "Akzeptieren" klicken.

 

Mit freundlichen Grüßen,

 

Csaba Singer

Ähnliche Fragen in der Kategorie Programmierung