Textdatei Koordinaten auslesen und als QString speichern

Du bist neu in der Welt von C++? Dann schau hier herein!
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

Ziel dieses Schrittes in meinem Programm soll sein, dass der User eine TextDatei einladen kann welche x und y Koordinaten enthält, welche im nächsten Schritt als Grafik ausgegeben werden sollen.

Ich bin nun soweit dass ich textdateien einladen kann und diese ja auch als QString gespeichert werden und danach in einem Textfeld angezeigt werden.

Meine Frage ist nun wie mache ich weiter.
Wie und an Welcher Stelle muss ich die ausgelesenen Koordinaten mit x und y werten belegen damit ich diese hinterher zeichnen lassen kann?

Code: Alles auswählen

#include <QtGui/QApplication>
#include "mainwindow.h"



int main(int argc, char *argv[])
{

    QApplication a(argc, argv);



    MainWindow* w =new MainWindow;
    window->show();

    return a.exec();
}

Code: Alles auswählen

 #include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QMainWindow *parent, Qt::WindowFlags flags) :

/
    QMainWindow(parent, flags),

    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->pushButton, SIGNAL(clicked()), qApp, SLOT(quit()));

    connect(ui->pushButtonopen, SIGNAL(clicked()), this, SLOT(openFile()));

}
void MainWindow::openFile()
{

    QString fileName;
    fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"","Alle Dateien(*.*)");
    if(!fileName.isEmpty())
    {
        QFile file(fileName);
        if (file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
        ui->plainTextEdit->setPlainText(file.readAll());

}
    }
}
//
MainWindow::~MainWindow()
{
    delete ui;
}

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextEdit>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QMainWindow *parent=0, Qt::WindowFlags flags=0);
    ~MainWindow();
public slots:
    void openFile();

private:


    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
die dateien sind aufgebaut: zeile 1: x y
Zeile 2: xWert yWert
vielen da nk schonmal im voraus
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Einfach die Datei z.B. per QTextStream Zeile für Zeile lesen und mit QString - Funktionen wie split() auseinandernehmen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

danke für den denkanstoß,
hab das ganze nun in einem QTextStream gespeichert (hoffe ich zumindest) jedoch fehlt mir jetzt mal wieder das nötige geschick die split funktion einzubauen

mein neuer code:

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QMainWindow *parent, Qt::WindowFlags flags) :


   QMainWindow(parent, flags),

   ui(new Ui::MainWindow)
{
   ui->setupUi(this);

   connect(ui->pushButtonquit, SIGNAL(clicked()), qApp, SLOT(quit()));

   connect(ui->pushButtonopen, SIGNAL(clicked()), this, SLOT(openFile()));

   connect(ui->pushButtonsave, SIGNAL(clicked()), this, SLOT(saveFile()));

}
//Datei Öffnen und in String mit QTextStream zeilenweise auslesen


void MainWindow::openFile()
{
    QString fileName;
    fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"","Alle Dateien(*.*)");

    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    return;
    //lese als TextStream bis zum Ende
        QTextStream in(&file);
    while (!in.atEnd())
    {
        //this reads the line from QFile
        QString line = in.readLine();
        //damit alle Zeilen Angezei
        line = in.readAll();
        //zeige Zeile an
        ui->plainTextEdit->setPlainText(line);
    }
}

//bis jetzt specihern einer leeren Text datei
void MainWindow::saveFile()
{

   QString fileName;
   fileName = QFileDialog::getSaveFileName(this, tr("Save File"),"",tr("Text Files (*.txt);;C++ Files (*.cpp*.h)"));
   if(fileName !="")
   {
       QFile file(fileName);
       if (!file.open(QIODevice::ReadWrite)){




           }

}
}
//
MainWindow::~MainWindow()
{
   delete ui;
}
danke für weitere Hilfe
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von Christian81 »

Wo genau ist jetzt das Problem? line.split(' ') und fertig... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

habe jetzt

QStringList Koords =line.split(",");

bekomme jedoch folgende Fehlermeldung
undefined refeence to MainWindow::slpit()
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von upsala »

Die Fehlermeldung passt aber nicht zu deinem Code.
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

jetzt klappt es, habe mal alles neugestartet

ok jetzt habe ich mein Text Zeile für Zeile eingelesen jetzt müsste ich doch meine Liste Koords definieren können sodass jede eingelesen Zeile mit den ersten Zahlen bis zur Leerstelle einem xWert zuweist und die weiteren Zahlen einem YWert oder?

line:[erste Zahlen = xWert, weitere Zahlen =yWert]

wäre das so irgendwie möglich?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von Christian81 »

Sorry aber ein wenig C und C++-Grundlagen sind schon nötig. Dann wüsstest Du auch wie man eine Struktur definiert (oder einen stl und/oder Qt-Container verwendet)
z.B. QVector<QPoint> oder std::vector<std::pair<float,float> >

-> C++ Grundlagen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

habe jetzt versucht meine C++ Grundlagen ein zu erweitern, jedoch stehe ich immer noch vor einer wand und habe noch immer keine ahnung wie das funktionieren könnte.

habe nun etliche sachen mit qvector<qpoint> ausprobiert und bekam nur fehlermeldungen

vielleicht könnte mir jemand nocheinmal hilfestellung geben wie das ganze ungefähr aussehen müsste

letzter stand sieht nun so aus:

Code: Alles auswählen

//Hiermit sollte ich doch meine Eingelesene Textdatei über QString in QTextStream umgewandelt haben welcher jeden Zeile bis zum ende des files durchliest?? 
QTextStream stream(&file);
QString line ) stream.readLine();
line=stream.readAll();
// nehme für jede Zeile einen Punkt welcher ja x und y Koordianten enthält
QVektor<QPoint> line;
// Starte ab Zeile 3 und ignoriere Zeile 1-2
for ( int i=0, i>2, i++)

wie man merkt bin ich total überfordert muss das ganze jedoch für die uni machen und hab noch immer keinen grünen faden gefunden um mit dem programmieren weiter zu kommen

danke für jede hilfe
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von upsala »

Was ist ein QVektor?

Was willst du damit?

Code: Alles auswählen

QString line ) stream.readLine();
For-Schleifen sind in allen Programmiersprachen gleich und gehören somit zu den absoluten Grundlagen.
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

danke für die schnelle antwort

ok werde mich jetzt nochmals genaustens mit der for schleife beschäftigen , habe gedacht ich hätte das schon verstanden wie das funktioniert(wenn ich das in büchern lese erscheint mir das auch logisch nur wenn ichs selbst anweden will ists immer noch sehr kompliziert)

Code: Alles auswählen

QString line = stream.readLine();
sollte es sein, und damit sag ich doch er soll eine zeile lesen , was unsinnig ist da das ja QTextStream sowieso macht oder?

und QVector ist soweit ich das richtig verstanden habe ein Speicherplatz wo meine Koordinaten gespeichert werden, welche ich dann von da aus als Punkt mit x und y koordinaten speicher kann?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von franzf »

mutantmonkey hat geschrieben:

Code: Alles auswählen

QString line = stream.readLine();
sollte es sein, und damit sag ich doch er soll eine zeile lesen , was unsinnig ist da das ja QTextStream sowieso macht oder?
QTextStream macht nur das was du ihm sagst. Wenn du willst, dass er eine Zeile einliest, musst du ihm das auch sagen. Ich versteh nicht, wo das Problem ist.
Dein Problem oben war eigentlich, dass du in der Schleife ein readLine() UND ein readAll() stehen hattest. readAll() liest alles ein und setzt den Dateizeiger auf das Ende - somit wird die Schleife genau einmal durchlaufen, du hast einen riesigen Batzen in line, definitiv aber keine einzelne Zeile.
Entweder liest du wirklich Zeile für Zeile (readLine() in einer Schleife), oder du liest alles auf einmal, dann aber ohne Schleife. Beides ist möglich, beide haben Vor- und Nachteile.
und QVector ist soweit ich das richtig verstanden habe ein Speicherplatz wo meine Koordinaten gespeichert werden, welche ich dann von da aus als Punkt mit x und y koordinaten speicher kann?
QVector ist ein (generischer) Container. Der kann ALLES speichern, so lange es konstruier-, kopier- und zerstörbar ist. Im Prinzip ist es eine Objektorientierte Abstraktion eines Arrays, mit einigen bequemen Features (automatische Größenanpassung, Container kann einfach kopiert werden, Bereichsprüfungen usw.).
Ein QVector kann zwar zum halten eines Vektors im grafischen Sinne (also Aneinanderreihung von zusammengehörigen Punkten) benutzt werden, ist aber nicht die alleinige und ausschließliche Benutzung.
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

danke franzf für die ausführliche erklärung
ok ich möchte das ganze zeile für zeile auslesen somit fiegt readAll raus,
somit würde ich das ganze mit einer schleife machen

Code: Alles auswählen

QString line = stream.readLine();
//jetzt kommt meine schleife
// Starte ab Zeile 3 und ignoriere Zeile 1-2, mit line++ durchlaufe file bis ende
for ( line=0, line>2, line++)
{
//jede line soll als QPoint gespeichert werden
//hier müsste ich  doch auch noch irgendwie sagen was jetzt der x wert ist und was der ywert???speichere ich mit der Zeile jede durchlaufene Zeile als QPunkt?
QVektor<QPoint> line;
}
oder muss ich noch eine klasse QPoint erstellen wo cih dann meine Koordinaten definiere??


geht das so in die richtige richtung?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von franzf »

Du solltest dir erstmal überlegen, wie das Format deiner Datei aussehen soll, also wie die Punkte abgespeichert werden - vorher kann man auch nicht genau sagen, wie du das einlesen sollst.
Wenn das passt, formulierst du in Worten, was passieren soll.
Angenommen, du hast eine Datei, in der jede Zeile einen Punkt enthält, dann könnte sich der Einlese-Algorithmus so anhören:

Code: Alles auswählen

So lange die Datei nicht zu Ende ist:
    Lese neue Zeile in QString line.
    Extrahiere aus line die beiden Koordinaten in int x, int y.
    Speichere x und y passend in einem QPoint point.
    Füge point meinem QVector<QPoint> points hinzu.
Wo liegt das Problem in dieser "Bedienungsanleitung"?

Evtl. kannst du dir aber auch mal QSettings anschauen, da solltest du gleich einen QVector<QPoint> reinhauen können.
mutantmonkey
Beiträge: 25
Registriert: 28. Juni 2011 09:27

Re: Textdatei Koordinaten auslesen und als QString speichern

Beitrag von mutantmonkey »

danke für die Bedienungsanleitung, das hilft mir schonmal die Struktur richtig zu verstehen.

ja ich will zuerst ein file einlese das wie folgt aufgebaut ist
123 567
124 987
154 976

erste spalte sind xKoordinaten zweite dann yKoordinaten

habe versucht die Bedienungsanleitung umzusetzen und soweit wäre ich schoneinmal und hoffe das ich jetzt nicht wieder einmal nur unsinn poste

Code: Alles auswählen

QTextStream stream (&file);
while(!file.atEnd())
{
QString line = stream.readLine();
for (int line=0; line++)
{ 
line = getLine(intx; inty);
QPoint point = line;
QVector<QPoint> point;              
}
}
kann ich das so irgendwie umszuetzen??
Antworten