Linijka wygląda w ten sposób "--</td>2 200,98</td>-0,74</td>10"
jest ona pobierana z plku.txt
W jaki sposób mogę pokazać ją w Qt Creator w ten sposób by była pokazana tylko cząstka tej linijki -0,74 ?
próbowałem to zrobić w ten sposób: qDebug()<<linijka.split("td>2 200,98<");
lecz wyrzuca mi wtedy ("--</", "/td>-0,74</td>10") i zbyt wiele to nie pomaga:(
0
0
To pytanie wygląda na typowy problem xy.
Bezpośrednia odpowiedź na Twoje pytanie: użyj regexa (QRegExp
skoro już używasz Qt).
Ale zastanów się co naprawdę chcesz robić, bo to wygląda jak parsowanie html, a do tego regexy zdecydowanie się nie nadają.
0
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
w.pobieraj();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::pobieraj()
{
manager=new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(koniecpobierania(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("https://www.gpw.pl/indeksy_gieldowe")));
}
void MainWindow::koniecpobierania(QNetworkReply*odpowiedz)
{QString doplikuidzie;
if(odpowiedz->error())
{
qDebug()<<"Nie udalo sie";
}
else
{
QString strim=odpowiedz->readAll();
QTextStream pobranytekst(&strim);
QString linia;
while(!pobranytekst.atEnd())
{
linia=pobranytekst.readLine();
if(linia.endsWith("</table>"))
{
//qDebug()<<linia;
doplikuidzie=doplikuidzie+linia+"<br>";
}
}
}
zapisdopliku(doplikuidzie);
}
void MainWindow::zapisdopliku(QString przeniesienie)
{
QString sciezka="C:/Users/FIlipk/Desktop/Projekty QT/indeksygieldowe/pobrane.txt";
QFile tworzplik(sciezka);
if(!tworzplik.open(QFile::WriteOnly|QFile::Text))
{
qDebug()<<"Nie mozna utworzyc pliku !";
return;
}
QTextStream dopliku(&tworzplik);
int dlugoscprzeniesienie=przeniesienie.size();
for(int i=0;i<dlugoscprzeniesienie;i++)
{
if(i%50==0)
{
przeniesienie.insert(i,"\n");
}
}
dopliku<<przeniesienie;
tworzplik.close();
filtrujipokaz();
}
void MainWindow::filtrujipokaz()
{
QString sciezka="C:/Users/FIlipk/Desktop/Projekty QT/indeksygieldowe/pobrane.txt";
QFile otworzplik(sciezka);
if(!otworzplik.open(QFile::ReadOnly|QFile::Text))
{
qDebug()<<"Nie mozna otworzyc pliku !";
}
QString linijka;
QTextStream zawartosc(&otworzplik);
int ktoralinia=1;
while(!zawartosc.atEnd())
{
linijka=zawartosc.readLine();
if(ktoralinia==15)
{
qDebug()<<linijka;
}
ktoralinia++;
}
// qDebug()<<"\n";
// qDebug()<<dlugosctekstu;
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUrl>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QTextStream>
#include <QFile>
#include <QRegExp>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
void pobieraj();
void zapisdopliku(QString);
void filtrujipokaz();
~MainWindow();
public slots:
void koniecpobierania(QNetworkReply*odpowiedz);
private:
Ui::MainWindow *ui;
QNetworkAccessManager*manager;
};
#endif // MAINWINDOW_H
Kod jest bardzo pokrecony i wątpie ,że komuś się będzie chciało rozkminiać dlatego nie wstawiałem.
W programie chodzi mi o to by
1.pobierał html ze strony https://www.gpw.pl/indeksy_gieldowe.
2.Przeniósł do pliku .txt całą tą tabelkę ze zmianami indeksów giełdowych.
3.Odczytał Zmiana do odn. (w %) i porównał ją z tym co było przy ostatnim uruchomieniu.Narazie próbuje zrobić 1 (WIG20) jak to się uda to reszta powinna pójść z górki.