csv-Datei downloaden

Alles rund um die Programmierung mit Qt
Antworten
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

csv-Datei downloaden

Beitrag von dolin93 »

Hallo,
mit php habe ich mir ein Programm erstellt, das von Yahoo finance für mehrere Aktien die historischen Kursdaten herunterlädt und auswertet etc.. Da für mathematische Anwendungen C++ viel besser ist, würde ich dies gerne mit Qt Networking versuchen, aber leider gelingt es mir nicht. In php schreibt man z.B. einfach

Code: Alles auswählen

$Name="SIE.DE"
$fileHandle = fopen ("http://ichart.finance.yahoo.com/table.csv?s=$Name&d=20&e=6&f=2014&g=d&a=17&b=9&c=2014&ignore=.cvs","r");
{$Kurse = fgetcsv ($fileHandle, 999999, ",");
$Zeilen[$Tage]=$Kurse;
$Tage++;
}while($Kurse)
In Qt geht natürlich mit

Code: Alles auswählen

ifstream input("http://ichart.finance.yahoo.com/table.csv?s=AAPL&d=20&e=6&f=2014&g=d&a=17&b=9&c=2014&ignore=.cvs",ios::in);
nichts. Bis jetzt habe ich noch keine Beschreibung gefunden, aus der hervorgeht, mit welchen Anweisungen ich die Kurse in mein Programm bringe, so daß ich sie dann z.B in einem QVector speichern kann.
Für nützliche Hinweise wäre ich sehr dankbar.
sirop
Beiträge: 8
Registriert: 15. Oktober 2014 11:46

Re: csv-Datei downloaden

Beitrag von sirop »

Schau:

Code: Alles auswählen

void Download::downloadFile(const QUrl &Url, const QString &dir)

{

    url = Url;

 

    QFileInfo fileInfo(url.path());

    QString fileName = fileInfo.fileName();

    if(fileName.isEmpty())

        fileName = "unknown.file";

 

    if(!dir.isNull())

        fileName = dir + "//" + fileName;

 

    if(QFile::exists(fileName))

    {

        int i = 0;

        fileName += ".";

 

        while(QFile::exists(fileName + QString::number(i)))

            ++i;

 

        fileName += QString::number(i);

    }

 

    file = new QFile(fileName);

    if(!file->open(QIODevice::WriteOnly))

    {

        delete file;

        file = 0;

        return;

    }
http://qt-project.org/forums/viewthread/16749
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: csv-Datei downloaden

Beitrag von dolin93 »

Vielen Dank für Deine Hilfe!
Leider habe ich es noch nicht geschafft, die gewünschten Daten mit Qt/C++ auf den Computer zu bringen. Ich habe anfangs mit Deinem Programmentwurf eine Klasse, aber dann eine Funktion geschrieben und mußte wegen Fehlermeldungen kleine Änderungen vornehmen bzw.einen Teil mit // ganz ausschalten. Wenn ich das Programm

Code: Alles auswählen

#include <QtCore/QCoreApplication>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <QtNetwork>
#include <QDebug>
using namespace std;


void  downloadFile(const QUrl &Url, const QString &dir)
{

    QUrl url = Url;



    QFileInfo fileInfo(url.path());

    QString fileName = fileInfo.fileName();

    if(fileName.isEmpty())

       { fileName = "unknown.file";}

   qDebug()<<"!!!!!!!!!"<<fileName;

    if(!dir.isNull())

    {fileName = dir + "//" + fileName;}

    qDebug()<<"????????"<<fileName;

    if(QFile::exists(fileName))

    {

        int i = 0;
        qDebug()<<"i="<<i;
        fileName += ".";

        qDebug()<<"#########"<<fileName;

        while(QFile::exists(fileName + QString::number(i)))

            ++i;


        qDebug()<<"*******"<<fileName;
        fileName += QString::number(i);

    }



    //QFile file = new QFile(fileName);

    //if(!file->open(QIODevice::WriteOnly))

    //{

      //  delete file;

        //file = 0;

       // return;

    //}
}
  int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);

  char separator, step='d',tags;
  string symbol="AAPL";
  int startDay=20,startMonth=7,startYear=2014,endDay=17, endMonth=10,endYear=2014,sM,eM;
 sM=startMonth-1;
 eM=endMonth-1;
 QUrl histUrl("http://ichart.finance.yahoo.com/table.csv?s=AAPL&d=20&e=6&f=2014&g=d&a=17&b=9&c=2014&ignore=.cvs");
 downloadFile(histUrl,"");

  return a.exec();
}
laufen lasse, dann erhalte ich die Ausgabe

Code: Alles auswählen

!!!!!!!!!"table.csv"
????????"//table.csv" 
und mehr nicht. Der Block

Code: Alles auswählen

 int i = 0;
        qDebug()<<"i="<<i;
        fileName += ".";

        qDebug()<<"#########"<<fileName;

        while(QFile::exists(fileName + QString::number(i)))

            ++i;


        qDebug()<<"*******"<<fileName;
        fileName += QString::number(i); 
wird offensichtlich gar nicht durchlaufen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: csv-Datei downloaden

Beitrag von Christian81 »

Zum Herunterladen einer Datei benutzt man den QNetworkAccessManager: https://qt-project.org/doc/qt-4.8/qnetw ... nager.html
In der Beschreibung steht auch ein gutes Beispiel wie man die Website von (damals noch) nokia herunterlädt.

Der Code, der da oben steht und auch die Funktion downloadFile() sind der Teil, in dem das Reply ausgewertet wird...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: csv-Datei downloaden

Beitrag von dolin93 »

Vielen Dank für Deinen Hinweis!
Inzwischen bringe ich mit dem sich im Anhang befindenden Programm die gewünschten Daten auf den Computer, aber leider nicht nur die Daten vom 20.7.2014 bis 17.10.2014, wie im Programm gefordert, sondern alle bis zum Jahre 1981. Vielleicht weiß jemand, was ich ändern muß und wie ich die Daten am elegantesten in das Hauptprogramm bringe; denn mit meiner sonst angewendeten Vorgehensweise wird es in diesem Fall etwas umständlich.
Mit freundlichen Grüssen
dolin93
Dateianhänge
Yahoo_lesen.zip
(4.52 KiB) 298-mal heruntergeladen
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: csv-Datei downloaden

Beitrag von veeman »

Du solltest Übersichtshalber mal die Parameter a,b,c,d, etc in der Reihenfolge lassen.

Du kriegst die komplette Liste weil du Monat und Tag vertauscht hast.

Nen int Wert kriegst mittels QString::arg() in einen String den du als URL verwenden kannst.
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: csv-Datei downloaden

Beitrag von dolin93 »

Vielen Dank für Deine Hilfe!
Da es beim Posten ungefähr Mitternacht war, so hatte die Aufmerksamkeit schon etwas nachgelassen. .Inzwischen sind diese Probleme beseitigt, und das QByteArray in Vektoren und eine Liste zu zerlegen, scheint auch zu klappen. Leider habe ich bis jetzt mit meiner sonst üblichen Vorgehensweise das QByteArray noch nicht ins Hauptprogramm gebracht.
Die momentane Version habe ich angehängt. Für nützliche Hinweise wäre ich sehr dankbar.
Mit freundl. Grüssen
dolin93
Dateianhänge
Yahoo_lesen4.zip
(5.05 KiB) 321-mal heruntergeladen
Antworten