Seite 1 von 3
Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 13. Juli 2011 15:21
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
Verfasst: 15. Juli 2011 06:33
von Christian81
Einfach die Datei z.B. per QTextStream Zeile für Zeile lesen und mit QString - Funktionen wie split() auseinandernehmen.
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 17. Juli 2011 16:27
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
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 17. Juli 2011 17:37
von Christian81
Wo genau ist jetzt das Problem? line.split(' ') und fertig...

Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 17. Juli 2011 18:09
von mutantmonkey
habe jetzt
QStringList Koords =line.split(",");
bekomme jedoch folgende Fehlermeldung
undefined refeence to MainWindow::slpit()
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 17. Juli 2011 18:37
von upsala
Die Fehlermeldung passt aber nicht zu deinem Code.
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 17. Juli 2011 18:48
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?
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 17. Juli 2011 18:56
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
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 29. Juli 2011 17:00
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
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 29. Juli 2011 17:40
von upsala
Was ist ein QVektor?
Was willst du damit?
For-Schleifen sind in allen Programmiersprachen gleich und gehören somit zu den absoluten Grundlagen.
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 29. Juli 2011 17:52
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)
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?
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 29. Juli 2011 18:35
von franzf
mutantmonkey hat geschrieben:
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.
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 30. Juli 2011 10:47
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?
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 30. Juli 2011 11:25
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.
Re: Textdatei Koordinaten auslesen und als QString speichern
Verfasst: 30. Juli 2011 13:19
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??