Débutant – télécharger les cours de bourse sur yahoo

Débutant – télécharger les cours de bourse sur yahoo - Java - Programmation

Marsh Posté le 31-07-2005 à 22:21:02    

Bonsoir,
 
Bonsoir à tous et à toutes, forumiens,forumiennes,
 
 
Je débute avec l’utilisation du langage java, je ne suis pas informaticien, ce qui fait que je patauge un peu… beaucoup…  :pt1cable:  
 
Je cherche à télécharger les cours de bourse sur yahoo http://fr.finance.yahoo.com/q/hp?s [...] f=2005&g=d
Pour les transformer en fichier texte à sauvegarder sur le disque dur.
Jusque là, j’ai travaillé sur excel, l’enregistreur de macro se charge d’écrire une grande partie du code, ce qui rend plus facile la compréhension et donc l’auto-formation. Rien de tel avec java (ou si ça existe, je n’ai pas trouvé).
 
J’ai parcouru le web pendant une quinzaine de jours, travaillé des tutoriaux, compilé et exécuté exemples sur JCreator LE,  mais je n’ai pas réussi à trouver une solution pour mon projet avec java.
 
Les deux exemples qui me paraissent les plus proches de ce qu je cherche sont
http://java.sys-con.com/read/39248.htm
et
http://www.smartdataprocessing.com/lessons/l10.htm
 
 mais ces 2 codes  ne téléchargent en principe que la donnée du jour et non l’historique sur plusieurs mois, et, après compilation, je n’obtiens pas le résultat du téléchargement. ;
par exemple, si j’utilise The Stock Quote Program
 

Citation :


import java.net.*;
import java.io.*;
import java.util.StringTokenizer;
 
 class StockQuoter {
       String csvString;
       URL url = null;
       URLConnection urlConn = null;
       InputStreamReader  inStream = null;
       BufferedReader buff = null;
 
     StockQuoter(String symbol){
 
       try{
           url  = new              
               URL("http://quote.yahoo.com/d/quotes.csv?s="
                   + symbol + "&f=sl1d1t1c1ohgv&e=.csv" );
           urlConn = url.openConnection();
           inStream = new
               InputStreamReader(urlConn.getInputStream());
           BufferedReader buff= new BufferedReader(inStream);
 
           // get the quote as a csv string
           csvString =buff.readLine();  
 
           // parse the csv string
              StringTokenizer tokenizer = new
                          StringTokenizer(csvString, "," );
              String ticker = tokenizer.nextToken();
              String price  = tokenizer.nextToken();
              String tradeDate = tokenizer.nextToken();  
              String tradeTime = tokenizer.nextToken();  
 
              System.out.println("Symbol: " + ticker +  
                " Price: " + price + " Date: "  + tradeDate  
                + " Time: " + tradeTime);
     } catch(MalformedURLException e){
         System.out.println("Please check the spelling of the URL:"  
                      + e.toString() );
     } catch(IOException  e1){
      System.out.println("Can't read from the Internet: " +  
                                           e1.toString() );  
     }
     finally{
         try{
           inStream.close();
           buff.close();    
         }catch(Exception e){
            e.printStackTrace();
         }
     }  
   }  
 
  public static void main(String args[]){
       if (args.length==0){
          System.out.println(
                     "Sample Usage: java StockQuoter IBM" );
          System.exit(0);
       }  
       StockQuoter sq = new StockQuoter(args[0]);
  }
 
}


 
Le résultat donne :
 :??:  

Citation :


--------------------Configuration: <Default>--------------------
Sample Usage: java StockQuoter IBM
 
Process completed.


Mais le cours d’IBM n’apparaît pas , ni dans une fenêtre d’applet, ni sur C:
 
Il y a peut-être une procédure qui m’échappe ??  
 
J’ai également tenté de faire apparaître les historiques dans une fenêtre d’applet, sans plus de succès, il n’accepte pas mon adresse : http://fr.finance.yahoo.com/q/hp?s [...] f=2005&g=d
 

Citation :


import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
 
public class GetWebPage extends JFrame
      implements ActionListener
{
 private JLabel prompt; //Cues user to enter a URL.
 private JTextField sourceName; //Holds URL string.
 private JPanel requestPanel; //Contains prompt and
       //URL string.
 private JEditorPane contents; //Holds displayed page.
 
 public static void main(String[] args)
 {
  GetWebPage app = new GetWebPage();
  app.setSize(700,500);
  app.setVisible(true);
 
  app.addWindowListener(
   new WindowAdapter()
   {
    public void windowClosing(WindowEvent e)
    {
     System.exit(0);
    }
   }
  );
 }
 
 public GetWebPage()
 {
  setTitle("Simple Browser" );
 
  Container pane = getContentPane();
 
  requestPanel = new JPanel();
  prompt = new JLabel("Required URL: " );
  sourceName = new JTextField(25);
  sourceName.addActionListener(this);
  requestPanel.add(prompt);
  requestPanel.add(sourceName);
  pane.add(requestPanel, BorderLayout.NORTH);
  contents = new JEditorPane();
 
  //We don't want the user to be able to alter the
  //contents of the Web page display area, so...
  contents.setEditable(false);
 
  //Create object that implements HyperlinkListener
  //interface..
  LinkListener linkHandler = new LinkListener();
 
  //Make the above object a HyperlinkListener for
  //our JEditorPane object...
  contents.addHyperlinkListener(linkHandler);
 
  //'Wrap' the JEditorPane object inside a
  //JScrollPane, to provide scroll bars...
  pane.add(new JScrollPane(contents),
         BorderLayout.CENTER);
 }
 
 public void actionPerformed(ActionEvent e)
 //Called when the user presses <Enter>
 //after keying a URL into the text field
 //and also when a hyperlink is clicked.
 {
  showPage(sourceName.getText());
 }
 
 private class LinkListener
     implements HyperlinkListener
 {
  public void hyperlinkUpdate(HyperlinkEvent e)
  {
   if (e.getEventType() ==
     HyperlinkEvent.EventType.ACTIVATED)
    showPage(e.getURL().toString());
   //Other hyperlink event types ignored.
  }
 }
 
 private void showPage(String location)
 {
  try
  {
   //Reset page displayed on JEditorPane...
   contents.setPage(location);
 
   //Reset URL string in text field...
   sourceName.setText(location);
  }
  catch(IOException e)
  {
   JOptionPane.showMessageDialog(this,
     "Unable to retrieve URL",
     "Invalid URL",
     JOptionPane.ERROR_MESSAGE);
  }
 }
}


 
Merci d’avance pour toute aide qui me sortira de ce mauvais pas
 
albert
 
 
 
 

Reply

Marsh Posté le 31-07-2005 à 22:21:02   

Reply

Marsh Posté le 01-08-2005 à 00:05:43    

Vu le merdier qu'est leur code source je crois que tu peux y renoncer tout de suite :D Ou alors tu vas vraiment devoir t'amuser avec les regex :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 01-08-2005 à 00:08:12    

Reply

Marsh Posté le 01-08-2005 à 00:32:05    

bonsoir esox_ch,
 
tu me conseilles donc d'orienter mes recherches sur java.util.regex ??
mais on ne peut pas trouver un tutorial complet sur le téléchargement??
 :)  
 
je croyais java plus performant que vba sur excel, j'ai l'impression qu'il faut ramer...
 
 
merci the real m oins moins pour ton adresse, je l'ai essayée dans "simple browser", il n'apprécie pas plus  : "unable to retrieve url"
 :??:

Reply

Marsh Posté le 01-08-2005 à 06:59:43    

Bonjour,
 
Sans répondre à ta question, je te signale que certains logiciels boursiers téléchargent leurs bases de cours depuis les pages de téléchargement gratuit de Bousorama ou des Echos, apparemment par simples requêtes GET/POST.
 
Tu peux essayer de faire de même...
 
Nicolas

Reply

Marsh Posté le 01-08-2005 à 11:20:36    

bonjour Nicolas_75,
 
je vais étudier la question;
 

Citation :


à ton avis, de simples requêtes GET/POST  sont plus aisées à mettre en œuvre que java.util.regex ?

,
 
j’ai fait quelques recherches rapides, il semble qu’il soit nécessaire de maîtriser le html, c’est une contrainte supplémentaire pour moi.
 
C’est quand même extraordinaire que java demande autant de complexité. Je sais bien que le vba sur excel est un langage interprété, mais il suffit de quelques lignes pour obtenir le résultat recherché, voici un exemple de téléchargement sur euronext :

Citation :


With ActiveSheet.QueryTables.Add(Connection:= _
     "URL;http://www.euronext.com/tools/datacentre/dataCentreDownloadHTML/0,4591,1679_2276422,00.html?idInstrument=14813&indexCompo=&opening=on&high=on&low=on&closing=on&volume=on&dateFrom=" & m & "&dateTo=" & n & "&typeDownload=2" _
        , Destination:=[A65536].End(xlUp)(2))
         .WebFormatting = xlWebFormattingNone
        .Refresh BackgroundQuery:=False
    End With


 
On ne peut pas trouver la même chose en java ???
 
 :)  
 
cordialement
albert

Reply

Marsh Posté le 01-08-2005 à 11:34:40    

albert95 a écrit :


Citation :


With ActiveSheet.QueryTables.Add(Connection:= _
     "URL;http://www.euronext.com/tools/datacentre/dataCentreDownloadHTML/0,4591,1679_2276422,00.html?idInstrument=14813&indexCompo=&opening=on&high=on&low=on&closing=on&volume=on&dateFrom=" & m & "&dateTo=" & n & "&typeDownload=2" _
        , Destination:=[A65536].End(xlUp)(2))
         .WebFormatting = xlWebFormattingNone
        .Refresh BackgroundQuery:=False
    End With


 
On ne peut pas trouver la même chose en java ???


Fort heureusement, la réponse est non. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 01-08-2005 à 20:43:16    

Pour ce post, je vais être un peu long, parce que le sujet me paraît complexe et il me semble qu’il nécessite quelques explications sur ma démarche.
 
Je remercie par avance ceux et celles qui voudront bien prendre le temps de lire et essayer de m’apporter des solutions.
 
J’ai deux questions à poser :
 
A/ comment fonctionne
 
_datere = new RE("^([\\d]+)-([\\w]+)-([\\d]+)" );
stringbuffer.append("http://chart.yahoo.com/table.csv?s=" );
 
 
B/ comment créer une interopérabilité avec un package non standard ?
 
 
 
A/ comment fonctionne la chaîne de caractères
 
suite à la recommendation de esox_ch, j'ai travaillé sur regex.
 :)  
Je commence à comprendre l’utilisation de regex avec la liste des classes prédéfinies et les Méta caractères
 
_datere = new RE("^([\\d]+)-([\\w]+)-([\\d]+)" );
 
http://cyberzoide.developpez.com/java/regex/regex.pdf
 
J’ai un code en exemple où il est écrit (1/YahooUSHistoricLoader)
 :

Citation :


private static RE getDateRE()
    {
        if(_datere == null)
            try
            {
                _datere = new RE("^([\\d]+)-([\\w]+)-([\\d]+)" );
            }
            catch(RESyntaxException resyntaxexception)
            {
                System.err.println(resyntaxexception);
            }
        return _datere;
    }


 
Quoique, il semble qu’en principe, il devrait y avoir  
 

Citation :


Pattern
Représentation compilée d’un motif.
et
Matcher
Moteur de recherche d’un motif dans une chaîne de
caractères.


 
Il n’y a rien de tout cela dans        
   
     

Citation :

 
  _datere = new RE("^([\\d]+)-([\\w]+)-([\\d]+)" );
stringbuffer.append("http://chart.yahoo.com/table.csv?s=" );


 
Dans ce code qui me sert d’exemple, tiré d’un.jar décompilé qui fonctionne, je ne comprends pas le fonctionnement de        

Citation :


 stringbuffer.append("http://chart.yahoo.com/table.csv?s=" );


 
Si StringBuffer.append() Ajoute à la fin une chaîne représentant la valeur de l'argument
et si l’adresse URL est une chaîne de caractères, alors ce code 1/YahooUSHistoricLoader devrait fonctionner avec sa super classe 2/BaseYahooLoader
 
 
B/ comment créer une interopérabilité avec un package non standard ?
 
je ne peux pas vérifier cette procédure, parce que 2/ BaseYahooLoader fait appel à un package non standard : import robotrader.market.HistoricData;
je ne sais pas comment les rendre inter-opérables.  
Il n’est pas nécessaire de créer un CLASSPATH puisque le .jar fonctionne sans rien ajouter  au CLASSPATH, mais alors, comment ça marche ??
 
http://robotrader.sourceforge.net/
 
Robotrader est une petite merveille, à la fois pour la programmation java, mais aussi pour l’application en back-test des stratégies de trading
 
1/YahooUSHistoricLoader
 

Citation :


 
import java.io.File;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.List;
import org.apache.regexp.RE;
import org.apache.regexp.RESyntaxException;
 
// Referenced classes of package robotrader.quotedb.web:
//            BaseYahooLoader
 
public class YahooUSHistoricLoader extends BaseYahooLoader
{
 
    public YahooUSHistoricLoader()
    {
    }
 
    public static void main(String args[])
    {
        String s = "MSFT";
        String s1 = "20021231";
        String s2 = "20030115";
        YahooUSHistoricLoader yahooushistoricloader = new YahooUSHistoricLoader();
        System.out.println("url: " + yahooushistoricloader.makeUrlString(s, s1, s2));
        try
        {
            File file = new File("conf/msft.www58454.tmp" );
            List list = yahooushistoricloader.parseFile("MSFT", file);
            System.out.println("nbr quotes loaded: " + list.size());
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
    }
 
    protected String makeUrlString(String s, String s1, String s2)
    {
        StringBuffer stringbuffer = new StringBuffer();
        stringbuffer.append("http://chart.yahoo.com/table.csv?s=" );
        stringbuffer.append(s);
        stringbuffer.append("&a=" );
        stringbuffer.append(BaseYahooLoader.zeroBased(s1.substring(4, 6)));
        stringbuffer.append("&b=" );
        stringbuffer.append(BaseYahooLoader.zeroBased(s1.substring(6, 8)));
        stringbuffer.append("&c=" );
        stringbuffer.append(s1.substring(0, 4));
        stringbuffer.append("&d=" );
        stringbuffer.append(BaseYahooLoader.zeroBased(s2.substring(4, 6)));
        stringbuffer.append("&e=" );
        stringbuffer.append(BaseYahooLoader.zeroBased(s2.substring(6, 8)));
        stringbuffer.append("&f=" );
        stringbuffer.append(s2.substring(0, 4));
        stringbuffer.append("&g=d&y=0&z=" );
        stringbuffer.append(s);
        stringbuffer.append("&ignore=.csv" );
        return stringbuffer.toString();
    }
 
    private static RE getDateRE()
    {
        if(_datere == null)
            try
            {
                _datere = new RE("^([\\d]+)-([\\w]+)-([\\d]+)" );
            }
            catch(RESyntaxException resyntaxexception)
            {
                System.err.println(resyntaxexception);
            }
        return _datere;
    }
 
    protected String transformDate(String s)
    {
        if(getDateRE().match(s))
        {
            StringBuffer stringbuffer = new StringBuffer();
            String s1 = getDateRE().getParen(1);
            if(s1.length() == 1)
                stringbuffer.append("0" );
            stringbuffer.append(s1);
            String s2 = getDateRE().getParen(2);
            if(s2.equals("Jan" ))
                stringbuffer.append("01" );
            else
            if(s2.equals("Feb" ))
                stringbuffer.append("02" );
            else
            if(s2.equals("Mar" ))
                stringbuffer.append("03" );
            else
            if(s2.equals("Apr" ))
                stringbuffer.append("04" );
            else
            if(s2.equals("May" ))
                stringbuffer.append("05" );
            else
            if(s2.equals("Jun" ))
                stringbuffer.append("06" );
            else
            if(s2.equals("Jul" ))
                stringbuffer.append("07" );
            else
            if(s2.equals("Aug" ))
                stringbuffer.append("08" );
            else
            if(s2.equals("Sep" ))
                stringbuffer.append("09" );
            else
            if(s2.equals("Oct" ))
                stringbuffer.append("10" );
            else
            if(s2.equals("Nov" ))
                stringbuffer.append("11" );
            else
            if(s2.equals("Dec" ))
                stringbuffer.append("12" );
            String s3 = getDateRE().getParen(3);
            stringbuffer.append(s3);
            return stringbuffer.toString();
        } else
        {
            return null;
        }
    }
 
    public String toString()
    {
        return "Yahoo US";
    }
 
    private static RE _re;
    private static RE _datere;
    private static SimpleDateFormat _yahoodf = new SimpleDateFormat("ddMMyy" );
 
}


 
2/ BaseYahooLoader
 

Citation :


 
import java.io.*;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.regexp.RE;
import org.apache.regexp.RESyntaxException;
import robotrader.market.HistoricData;
 
// Referenced classes of package robotrader.quotedb.web:
//            IQuotesLoader, HttpLoader
 
public abstract class BaseYahooLoader
    implements IQuotesLoader
{
 
    public BaseYahooLoader()
    {
    }
 
    protected abstract String makeUrlString(String s, String s1, String s2);
 
    protected static final String zeroBased(String s)
    {
        return Integer.toString(Integer.parseInt(s) - 1);
    }
 
    public final List loadQuotes(String s, String s1, String s2)
    {
        String s3 = makeUrlString(s, s1, s2);
        try
        {
            File file = HttpLoader.load(new URL(s3));
            return parseFile(s, file);
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
        return null;
    }
 
    protected final List parseFile(String s, File file)
        throws IOException
    {
        BufferedReader bufferedreader = new BufferedReader(new FileReader(file));
        String s1 = bufferedreader.readLine();
        if(s1 == null)
            throw new IOException("empty file found : " + file.getPath());
        ArrayList arraylist = new ArrayList();
        while((s1 = bufferedreader.readLine()) != null)  
        {
            HistoricData historicdata = parseLine(s, s1);
            if(historicdata != null)
                arraylist.add(0, historicdata);
        }
        return arraylist;
    }
 
    protected final HistoricData parseLine(String s, String s1)
    {
        s1.trim();
        if(getRE().match(s1))
            try
            {
                HistoricData historicdata = new HistoricData(s, _yahoodf.parse(transformDate(getRE().getParen(1))), Float.parseFloat(getRE().getParen(2)), Float.parseFloat(getRE().getParen(3)), Float.parseFloat(getRE().getParen(4)), Float.parseFloat(getRE().getParen(5)), Float.parseFloat(getRE().getParen(6)));
                return historicdata;
            }
            catch(Exception exception)
            {
                System.out.println("error at line :" + s1);
                exception.printStackTrace();
                return null;
            }
        else
            return null;
    }
 
    private static final RE getRE()
    {
        if(_re == null)
            try
            {
                _re = new RE("^([^,]+),([\\d.]+),([\\d.]+),([\\d.]+),([\\d.]+),([\\d]+)" );
            }
            catch(RESyntaxException resyntaxexception)
            {
                System.err.println(resyntaxexception);
            }
        return _re;
    }
 
    protected abstract String transformDate(String s);
 
    public final String getStatus()
    {
        if(HttpLoader.getContentLength() == 0)
            return "connecting";
        if(HttpLoader.getContentLength() < 0)
            return "loading... " + HttpLoader.getLoaded() + " bytes so far...";
        else
            return "loading: " + HttpLoader.getLoaded() + "/" + HttpLoader.getContentLength();
    }
 
    private static SimpleDateFormat _yahoodf = new SimpleDateFormat("ddMMyy" );
    private static RE _re;
 
}
 


 
 
Voilà, j'espère ne pas avoir été trop long et si vous pouviez m’aider, je vous en serais très reconnaissant
 
 
albert
 
 

Reply

Marsh Posté le 01-08-2005 à 20:54:39    

Désolé de ne faire que survoler ton post, mais qq remarques malgré tout :
 
A/
 
Dans le code qui t'interpelle, les deux lignes n'ont aucun rapport direct entre elles... Il faudrait voir leur usage dans le reste du code. Mais isolées, comme ça, tu ne peux rien en tirer.
 
B/
 

Citation :

puisque le .jar fonctionne sans rien ajouter  au CLASSPATH


A beh si, tu dois l'ajouter explicitement au CLASSPATH.
 
Ensuite, tu pourras faire :
 

Code :
  1. import robotrader.market.HistoricData;


 
De là, à toi de lire la doc pour savoir pour où commencer : quelle classe vas-tu instancier, ou quelle factory vas-tu appeler, et comment.
 
Si cette librairie est prévue pour interagir, tu trouveras logiquement la doc qui va bien, et en tout cas la javadoc.
 
HTH.
 
[:pingouino]


Message édité par sircam le 01-08-2005 à 20:55:21

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 02-08-2005 à 14:50:22    


 
Merci sircam,
Je reprends ma quête dans l’espoir d’y arriver un jour… :)  
 
Je peux savoir si les résultats que j’obtiens sont les bons et si je peux continuer à travailler de cette manière, en interopérabilité avec d’autres classes ?
Mais peut-être me trompe-je et alors j’ai tout faux ???  
 :??:  
Merci d’avance pour tout conseil
 
La  création manuelle du CLASSPATH, c’est mon cauchemar. Heureusement, sur JCreator LE, le travail est simplifié (merci benou)
 
http://forum.hardware.fr/hardwaref [...] 1088-1.htm

Citation :

 
Configure => Option => JDKProfiles  
On séléctionne le jdk utilisé (en général y'en a qu'un)  
pi on va dans Edit  
Ensuite On a la fiche de tous les jar et dossier du "classpath" de Jcreator. Add Path pour rajouter un dossier, et Add Archive pour rajouter un jar


 
j’ai donc créé un dossier robotrader, dans lequel j’ai rangé  
- YahooFRHistoricLoader.jad
- YahooUSHistoricLoader.jad
- BaseYahooLoader.jad
- HistoricData.jad
 
 
A partir de JCreator , je compile, puis j’exécute  BaseYahooLoader :
 
- pour la compilation, j’obtiens en output :

Citation :


--------------------Configuration: <Default>--------------------
javac: invalid flag: C:\robotrader\BaseYahooLoader.jad
Usage: javac <options> <source files>
where possible options include:
  -g                        Generate all debugging info
  -g:none                   Generate no debugging info
  -g:{lines,vars,source}    Generate only some debugging info
  -nowarn                   Generate no warnings
  -verbose                  Output messages about what the compiler is doing
  -deprecation              Output source locations where deprecated APIs are used
  -classpath <path>         Specify where to find user class files
  -sourcepath <path>        Specify where to find input source files
  -bootclasspath <path>     Override location of bootstrap class files
  -extdirs <dirs>           Override location of installed extensions
  -d <directory>            Specify where to place generated class files
  -encoding <encoding>      Specify character encoding used by source files
  -source <release>         Provide source compatibility with specified release
  -target <release>         Generate class files for specific VM version
  -help                     Print a synopsis of standard options
 
Process completed.


 
Qu’est-ce que cela signifie ?
 
javac: invalid flag => je suppose que javac ne prend pas en charge C:\robotrader\BaseYahooLoader.jad, c’est normal, mais j’ai utilisé . Add Path pour ajouter un dossier. Alors ??
Faut-il en plus créer un classpath dans la variable d’environnement des propriétés systeme ???
 
Ou bien encore, faut-il réunir tous les .jad dans winzip, lui donner une extension .jar, puisque à l’exécution, l’output fait référence à « path of directories and zip/jar files » ??
 
 
- pour l’exécution, j’obtiens :
 

Citation :


 
- --------------------Configuration: <Default>--------------------
- Usage: java [-options] class [args...]
-            (to execute a class)
-    or  java [-options] -jar jarfile [args...]
-            (to execute a jar file)
-  
- where options include:
-     -client       to select the "client" VM
-     -server       to select the "server" VM
-     -hotspot      is a synonym for the "client" VM  [deprecated]
-                   The default VM is client.
-  
- [b] -cp <class search path of directories and zip/jar files> /b]
-     -classpath <class search path of directories and zip/jar files>
-                   A ; separated list of directories, JAR archives,
-                   and ZIP archives to search for class files.
-     -D<name>=<value>
-                   set a system property
-     -verbose[:class|gc|jni]
-                   enable verbose output
-     -version      print product version and exit
-     -version:<value>
-                   require the specified version to run
-     -showversion  print product version and continue
-     -jre-restrict-search | -jre-no-restrict-search
-                   include/exclude user private JREs in the version search
-     -? -help      print this help message
-     -X            print help on non-standard options
-     -ea[:<packagename>...|:<classname>]
-     -enableassertions[:<packagename>...|:<classname>]
-                   enable assertions
-     -da[:<packagename>...|:<classname>]
-     -disableassertions[:<packagename>...|:<classname>]
-                   disable assertions
-     -esa | -enablesystemassertions
-                   enable system assertions
-     -dsa | -disablesystemassertions
-                   disable system assertions
-  
- Process completed.


Citation :


 
"Si cette librairie est prévue pour interagir, tu trouveras logiquement la doc qui va bien, et en tout cas la javadoc"


 
c'est bien la démarche que je compte suivre. :)  
 
cordialement
 
albert

Reply

Marsh Posté le 02-08-2005 à 14:50:22   

Reply

Marsh Posté le 02-08-2005 à 15:00:24    

Albert,
 
Tu tentes d'utiliser des fichiers .JAD ??? Ce sont des classes décompilées ?!
 
Je faisais référence à des JAR, Java archives.
 
J'ai l'impression que tu t'attaques à gros morceau sans y être suffisamment préparé. Tu devrais peut-être te fixer un objectif intermédiaire plus à ta portée ?
 
Je ne peux te conseiller, pour commencer, que d'utiliser jEdit ou Notepad ou Ultra-Edit -- non, ce n'est pas une blague. C'est un moyen dur mais efficace pr maitriser le CLASSPATH, les JAR etc. On en parle sur le famaux topic "passage-obligé".
 
N'essaye pas de courir avant de marcher, ça pourrait vraiment te dégoûter de Java.
 
[:pingouino]


Message édité par sircam le 02-08-2005 à 15:00:48

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 02-08-2005 à 15:09:50    

j'ai une question déplacée sans doute mais...
connais tu perl ?
 
j'imagine - enfin je me doute - que tu as de très bons arguments pour programmer en Java, sans doutes les meilleurs arguments au monde, menfin le perl est un langage parfaitement adapté à ton problème ...
 
EDIT: Loin de moi l'envie de troller sur un topic Java bien entendu ...||


Message édité par mcjoedassin le 02-08-2005 à 15:14:22
Reply

Marsh Posté le 02-08-2005 à 15:41:17    


pour sircam,
J’ai commencé par NetBeans, il présente l’avantage d’avoir des objets qui se déplacent, mais je me perds un peu dans les modalités d’utilisation. On m’a conseillé éclipse, je m’suis pris un peu la tête avec…
JCreator m’a semblé plus simple, je suis à l’aise.
 
Les .jad, je les ai obtenus en décompilant de .jar avec DJ Java Decompiler 3.5
[url] http://www.zdnet.fr/telecharger/wi [...] 66s,00.htm [/url]
j’ai pensé que reconstituer un programme décompilé était le le meilleur moyen d’apprendre, faire du code… (c’est comme cela que j’ai appris le vba)
 
jEdit ou Notepad ou Ultra-Edit, je veux bien essayer, mais ça suppose de laisser tomber ma démarche originaire.  

Citation :


 « C'est un moyen dur mais efficace pr maitriser le CLASSPATH, les JAR etc »


 je peux travailler en parallèle, je vais chercher des tutoriaux.
 
Ce qui me semble être le plus casse-pieds (« chiant », même), c’est le CLASSPATH
 
En fait, pour la question du post précédent, c’est bien d’un problème de classpath qu’il s’agit, non ?
 

Citation :


N'essaye pas de courir avant de marcher, ça pourrait vraiment te dégoûter de Java


 
J’ai eu des monents  de crise, en effet, mais java c’est tout de même plus « pro » qu’excel  
 
je pense qu'on apprend vite de ses propres erreurs. j'imagine que les pros du forum, vous répondez mêmes à des "daubes" comme moi, c'est comme ça qu'on progresse, et tous ceux qui débutent, peuvent profiter des échanges, sans avoir à se mouiller en posant des question qui paraissent anodines (c'est vrai que ça énerve un peu les pros)
 
 
 
pour mcjoedassin, je ne connais pas perl. c'est plus simple que java ?
 
bon, mais j'avais envisagé de travailler java en prélude à C++. il faut peut-être que j'évite de me disperser
 
cordialement
albert

Reply

Marsh Posté le 02-08-2005 à 15:48:05    

perl n'est pas "plus simple" que Java. C'est un autre langage, simple, que tu peux maitriser rapidement, et qui une fois maitrisé est un régal pour parser des pages web comme tu le veux... c'est un régal pour les expressions régulières ...

Reply

Marsh Posté le 02-08-2005 à 15:50:25    

joe > C'est à envisager.
 
Maintenant, tout cela a l'air plus didactique qu'autre chose; pq ne pas commencer par Java ? Je ne sais pas si Perl est bien indiqué pour débuter, par sa syntaxe compacte et centrée sur l'efficacité.
 
Java me semble plus "didactique" (pas autant que Pascal, mais bon, ce dernier n'est plus à la mode).
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 02-08-2005 à 15:59:11    

sircam a écrit :

joe > C'est à envisager.
 
Maintenant, tout cela a l'air plus didactique qu'autre chose; pq ne pas commencer par Java ? Je ne sais pas si Perl est bien indiqué pour débuter, par sa syntaxe compacte et centrée sur l'efficacité.
 
Java me semble plus "didactique" (pas autant que Pascal, mais bon, ce dernier n'est plus à la mode).


 
oui... disons que l'application en question n'est pas non plus l'appli rêvée pour débuter en programmation ... toutefois est-ce là le cas (je pose la question) ? Il est complètement envisageable de faire ce programme en Java (ou en Pascal - ou en Ada - kasdedi à Florence M.) Après tout tu es parti sur Java, tu peux y arriver ... mais c'est un choix très discutable ...

Reply

Marsh Posté le 02-08-2005 à 16:06:04    

Boah, avec de la pratique, tu peux malgré tout torcher ça vite fait en Java. Tu auras toujours inévitablement le double de lignes de code, mais c'est pas vraiment le critère décisif.
 
Finalement, ce qui conditionne souvent ton choix, ce sont tes connaissances pratiques et tes petites habitudes. Voire même parfois de l'OS (AWK et bash sous Win, c'est pas top).
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 02-08-2005 à 16:15:09    

tout à fait. De toutes façon il faut rester très ouvert sur les langages de programmation et ne pas hésiter à programmer en de multiples langages ... même s'il faut y passer des heures en plus :)

Reply

Marsh Posté le 03-08-2005 à 20:00:54    

bonsoir sircam, mcjoedassin,the real moins moins,esox_ch,Nicolas_75, bonsoir à tous et à toutes, forumiens et forumiennes,
 

Citation :

N'essaye pas de courir avant de marcher, ça pourrait vraiment te dégoûter de Java


 
Maintenant je marche, je vais arriver à savoir où je mets les pieds. J’ai déjà compris ce que signifient les messages en output de JCrator
http://tecfa2.unige.ch/guides/java [...] javac.html
 
mais, pour le CLASSPATH, c’est d’un confus….
Il y aurait une procédure différente par type de système d’exploitation. Finalement, pour windows xp (dans mon computer), s’il n’y a pas de variable CLASSPATH configurée, il ne serait pas nécessaire d’en ajouter une ?? http://www.a525g.com/programmation [...] n-java.htm

Citation :

«  Remarque : Si votre système n'a pas de variable CLASSPATH de configurée, vous pouvez ignorer le paragraphe suivant… Notez aussi que depuis le JDK 1.2, cette variable n'est plus à configurer «


Vrai ou faux ??? j’ai passé des heures à travailler cette histoire de classpath !!!
 
(pour jEdit ou Notepad ou Ultra-Edit, c'est pas gagné)
 
- Je crois que je vais devoir changer de fil pour poser des questions d’ordre général sur l’utilisation des différentes procédures java (faudrait pas que je pollue)
 
albert

Reply

Marsh Posté le 03-08-2005 à 20:04:51    

On a un topic CLASSPATH sur ce forum, lancé par notre très estimé co-forumeur benou, et que je ne peux qui VIVEMENT te conseiller.


Message édité par sircam le 03-08-2005 à 20:05:11

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 03-08-2005 à 20:06:48    

sircam a écrit :

notre très estimé co-forumeur benou


Après cette couche de crème et mes réponses serviables, je pourrais bien me permettre un petit HS, qu'en pensez-vous ?
 
http://img256.imageshack.us/img256/3571/pingouinodisque1hk.gif
 
 
 
 
Merci   [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 03-08-2005 à 21:19:44    

ah! on peut mettre des gifs, pas mal ton chat disk jockey
 
http://www.ksurf.net/~bermania/gif/divers/tasse_cafe.gif
http://www.ksurf.net/~bermania/gif/infor/inf05t.gif
 
j'avais déjà travaillé le topic benou, très bien fait, mais lui, au contraire de ce que j'ai trouvé dans ma question précédente, préconise de créer un classpath pour xp...  
"créer une variable CLASSPATH (si elle n'existe pas)"
c'est ce qui a jeté le trouble dans mon esprit.  
apparamment, c'est cette solution qu'il faut suivre
 
cordialement  
albert
 

Reply

Marsh Posté le 03-08-2005 à 21:28:33    

il n'est pas nécessaire de créer de variable classpath, et je déconseille fermement de le faire, et ce sous tous les OS.
si ça aide, tu fais une variable temporaire genre
export POUET=truc.jar:machin.jar
puis  
java -cp $POUET com.machin.Bidule
 
Mais une CLASSPATH définie au niveau du systeme, c'est la porte ouverte à toutes les fenetres


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-08-2005 à 22:22:39    

the real moins moins a écrit :

Mais une CLASSPATH définie au niveau du systeme, c'est la porte ouverte à toutes les fenetres


Tout à fait mon cher mwin mwin. [:klem3i1]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 05-08-2005 à 13:06:40    

bonjour à tous,
j'ai donc mis de côté ma fixation sur CLASSPATH
 :)  
J’ai trouvé un tutorial qui pourrait, semble-t-il, constituer une bonne démarche pour l’objectif que je me suis fixé.
 
Il y a un ppt http://euro.ecom.cmu.edu/program/c [...] -intro.ppt
Qui donne des informations, succinctes mais utiles (page 32 et suite), et des codes exemples http://euro.ecom.cmu.edu/program/c [...] 3/utc/?N=A
Je me suis donc précipité dessus.
Mais :
1/ ça ne marche pas et je ne sais pas pourquoi
- la compilation de Stockquote.java indique qu’il manque « . » à import CSVReader; et si j’ajoute un « . »  à la fin, la compilation demande un « identifier ».  
- il y a bien un package CSVReader.java, mais je ne sais qu’en faire.
 
Si l’un d’entre vous pouvait me donner un coup d’main sur cette procédure…. :jap:  
 

Citation :


// StockQuote Class Example
//
// Author: Jeffrey Eppinger (eppinger@cmu.edu)
// Date:     February 3, 2000
// Modified: January 8, 2002
//
 
import java.net.URL;
import java.io.*;
import CSVReader.;
 
public class StockQuote implements Runnable  {
    private String  ticker;       // The ticker for the stock
    private String  price;        // The stock price
    private String  change;       // Today's delta in the stock price
    private String  date;         // The date of the stock quote
    private String  time;         // The time of the stock quote
    private String  name;         // The name of the stock
    private boolean keepRunning = true;  // Support for threadding (see below)
 
    private URL url;          // The URL used to get the stock quote
 
    private static int quoteCount = 0;   // Count of the number of quotes we've done
 
 // An internal routine that reads the URL and stuff the data into
    // instance variables.
 
    private void readURLData() throws IOException {
        InputStream is = url.openStream();
        InputStreamReader isr = new InputStreamReader(is);
        CSVReader c = new CSVReader(isr);
        String[] values = c.readCSVLine();
        if (values.length < 5) throw new IOException("Format error reading line, only " +
                                                     values.length +
                                                     " items!" );
        ticker = values[0];
        price  = values[1];
        change = values[4];
        date   = values[2];
        time   = values[3];
        name   = values[5];
 
        quoteCount = quoteCount + 1;
 
        c.close();
        isr.close();
        is.close();
    }
  // Internal constants used to construct URL string in constructor
 
    private final String urlHeader = "http://quote.yahoo.com/d/quotes.csv?s=";
    private final String urlTrailer = "&f=sl1d1t1c1nohgv&e=.csv";
 
 //
    // The constructor...takes a ticker
    //
 
    public StockQuote(String ticker) {
        String urlString = urlHeader + ticker + urlTrailer;
 
        try {
            url = new java.net.URL(urlString);
        } catch (IOException e) {
            System.out.println("IOException" + e);
            System.exit(0);
        }
    }
  //
    // An instance method to provide a current quote for the stock, as a string
    // The string include the ticker, price change and quote date/time
    //
 
    public String currentQuote(){
        try {
            readURLData();
        } catch (IOException e) {
            System.out.println("IOException" + e);
            System.exit(0);
        }
 
        String answer = ticker + ' ' + price + ' ' +
           change + " at " + date + ' ' + time;
 
        return answer;
    }
 
 
    //
    // This method returns a current price for the ticker
    //
 
    public float getPrice() {
        try {
            readURLData();
        } catch (IOException e) {
            System.out.println("IOException" );
            System.exit(0);
        }
        return Float.parseFloat(price);
    }
 //
    // This method returns a name for the ticker
    //
 
    public String getName() {
        if (name == null) {
            try {
                readURLData();
            } catch (IOException e) {
                System.out.println("IOException" );
                System.exit(0);
            }
        }
 
        return name;
    }
//
    // This method returns a change in the price for the ticker
    //
 
    public String getChange() {
        if (name == null) {
            try {
                readURLData();
            } catch (IOException e) {
                System.out.println("IOException" );
                System.exit(0);
            }
        }
 
        return change;
    }
 
    //
    // Accessor method for quoteCount
    //
 
    public static int getQuoteCount() {
        return quoteCount;
    }
  //
    // Support for printing current quotes from background thread
    //
 
    public void run() {
        while (keepRunning) {
            String quote = currentQuote();
            if (keepRunning) {
                System.out.println(quote);
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {};
        }
    }
 
 public void stopRunning() {
        keepRunning = false;
    }
 
}


 

Citation :


 
// Subclass of a BufferedReader
 
 
// Provides an additional instance method, readCSVLine(), that
 
// parses lines into substrings.  The substrings are separated by
 
// comma in the original input stream.
 
 
// Author: Jeffrey Eppinger (jle@us.ibm.com)
 
// Date:   January 27, 2000
 
import java.io.*;
public class CSVReader extends BufferedReader {
public CSVReader(Reader in) {
 super(in);
 }
 public String[] readCSVLine() throws IOException {
synchronized (lock) {
String line = super.readLine();
 int commaCount = 0;
 for (int i=0; i<line.length(); i++) {
 if (line.charAt(i) == ',') commaCount++;
 }
String[] values = new String[commaCount+1];
 int beginIndex = 0;
for (int i=0; i<commaCount; i++) {
 int endIndex = line.indexOf(',',beginIndex);
 if (line.charAt(beginIndex) == '"') {
values[i] = line.substring(beginIndex+1,endIndex-1);
 } else {
 values[i] = line.substring(beginIndex,endIndex);
 }
 beginIndex = endIndex + 1;
 }
values[commaCount] = line.substring(beginIndex);
 return values;
  }
}
}


 
2/ Quoiqu’il en soit, même si ça fonctionnait, je ne peux pas récupérer le résultat du téléchargement.
 
J’examine donc:  
- ToDoSwingGUI.java, il fonctionne, c’est un éditeur de texte, Il est peut-être conçu pour inscrire une liste de titres à télécharger, mais je ne sais qu’en faire.
 
- ToDoApplet.java  
La compilation s’exécute convenablement, mais l’exécution échoue, je ne comprends pas pourquoi : java.lang.NoSuchMethodError: main
Exception in thread "main"  
 

Citation :


import javax.swing.*;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
 
public class ToDoApplet extends JApplet implements ActionListener {
    JButton          topButton, bottomButton;
    JTextField       textField;
    JTextArea        textArea;
    java.util.Vector toDoList;
 
    public void init() {
        toDoList = new java.util.Vector();
 
        JPanel pane = new JPanel();
 
        JLabel label = new JLabel("Item: " );
        pane.add(label);
 
        Font textFont = new Font("Courier New", Font.BOLD, 14);
        textField = new JTextField(50);
        textField.setFont(textFont);
        pane.add(textField);
 
        Font buttonFont = new Font("Helvetica", Font.BOLD, 14);
        topButton = new JButton("Add To Top" );
        topButton.setFont(buttonFont);
        topButton.addActionListener(this);
        pane.add(topButton);
 
        bottomButton = new JButton("Add To Bottom" );
        bottomButton.setFont(buttonFont);
        bottomButton.addActionListener(this);
        pane.add(bottomButton);
 
        textArea = new JTextArea("*** The List is Empty ***",25,50);
        textArea.setEditable(false);
        textArea.setFont(textFont);
 
        JScrollPane scroller = new JScrollPane(textArea);
        pane.add(scroller);
 
        setContentPane(pane);
    }
 
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (source == bottomButton) {
            toDoList.add(textField.getText());
            displayList();
        } else if (source == topButton) {
            toDoList.insertElementAt(textField.getText(),0);
            displayList();
        }
    }
 
    private void displayList() {
        StringBuffer b = new StringBuffer();
        java.util.Iterator e = toDoList.iterator();
        int count = 1;
        while (e.hasNext()) {
            Object o = e.next();
            b.append(count);
            b.append(". " );
            b.append(o.toString());
            b.append("\n" );
            count = count + 1;
        }
        textArea.setText(b.toString());
    }
}


 
3/ il y a des appels de procédures :
StockQuoteSwingGUI.java lors de la compilation, j’obtiens le message destine à StockQuote.java : « identifier » sur import CSVReader.;
 
Bref, je tourne en rond, aussi, si un spécialste du java peut m’aider à délier cet écheveau, j’arriverai à comprendre comment ça marche tout ça. :bounce:  
 
Merci d’avance
 

Citation :


import javax.swing.*;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
 
public class StockQuoteSwingGUI extends JFrame implements ActionListener {
    private JButton      button;
    private JTextField   textField;
    private JTextArea    textArea;
 
    private java.util.Vector quoteHistory;
 
    public StockQuoteSwingGUI() {
        super("A Swing Application To Demonstrate That You can Do Just About Anything with Your Java GUI" );
        setSize(800,300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
 
        quoteHistory = new java.util.Vector();
 
        JPanel pane = new JPanel();
 
        Font labelFont = new Font("Helvetica", Font.BOLD, 14);
        JLabel label = new JLabel("Ticker:" );
        label.setFont(labelFont);
        pane.add(label);
 
        Font textFont = new Font("Courier New", Font.BOLD, 16);
        textField = new JTextField(10);
        textField.setFont(textFont);
        textField.addActionListener(this);
        pane.add(textField);        
 
        Font buttonFont = new Font("Helvetica", Font.BOLD, 12);
        button = new JButton("Quote" );
        button.setFont(buttonFont);
        button.addActionListener(this);
        pane.add(button);
 
        textArea = new JTextArea("Stock quotes go here",10,70);
        textArea.setEditable(false);
        textArea.setFont(textFont);
 
        JScrollPane scroller = new JScrollPane(textArea);
        pane.add(scroller);
         
        setContentPane(pane);
        show();
    }
 
    private void displayQuote(String ticker) {
        StockQuote sq = new StockQuote(ticker);
        quoteHistory.add(sq.currentQuote());
        StringBuffer b = new StringBuffer();
        java.util.Iterator e = quoteHistory.iterator();
        while (e.hasNext()) {
            Object o = e.next();
            b.append(o.toString());
            b.append("\n" );
        }
        textArea.setText(b.toString());
    }
 
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (source == button) {
            String ticker = textField.getText();
            displayQuote(ticker);
        } else if (source == textField) {
            String ticker = textField.getText();
            displayQuote(ticker);
        }
    }
 
    public static void main(String[] args) {
        new StockQuoteSwingGUI();
    }
}


 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed