ich bastle gerade an einem Tool, dass mir eine Texdatei in XML umwandelt.
Die einzelnen Values sind per "//" getrennt. Also versuchte ich eine Datei zu öffnen,
diese zeilenweise mit Split in eine Stringlist zu schreiben und dann über den Index zusammen mit XML-Tags in eine neue Datei zu schreiben. Kompilieren lässt es sich ohne Murren. Lade ich nun aber das zu konvertierende Dokument, so stürzt das Programm ab (Mac OSX 10.7.2).
Nachricht " CSV2XML <-(Name des Programms) wurde unerwartet beendet"
Die zu ladende Datei hat folgende Format
Anrede//Name//Art//Strasse//Ort
manche Elemente können auch leer sein, das wäre dann:
Anrede//Name////Strasse//Ort
insgesamt sind es immer 4 Trenner "//"
Hier ist mein Ansatz:
Header: hauptfenster.h
Code: Alles auswählen
#ifndef HAUPTFENSTER_H
#define HAUPTFENSTER_H
#include <QMainWindow>
namespace Ui {
class Hauptfenster;
}
class Hauptfenster : public QMainWindow
{
Q_OBJECT
public:
explicit Hauptfenster(QWidget *parent = 0);
~Hauptfenster();
private:
Ui::Hauptfenster *ui;
public slots:
void readFile();
};
#endif // HAUPTFENSTER_H
Quelldateien:
hauptfenster.cpp:
Code: Alles auswählen
#include "hauptfenster.h"
#include "ui_hauptfenster.h"
#include <QFile>
#include <QString>
#include <QFileDialog>
#include <QTextStream>
#include <QStringList>
Hauptfenster::Hauptfenster(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Hauptfenster)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(readFile()));
}
Hauptfenster::~Hauptfenster()
{
delete ui;
}
void Hauptfenster::readFile()
{
//Ursprungsdatei wird durch einen QFileDialog geöffnet
QFile file (QFileDialog::getOpenFileName(this,"Textdatei öffnen", "/", "Textdateien (*.*)"));
file.open(QIODevice::ReadOnly | QIODevice::Text); // Als Text-Datei nur zum Lesen öffnen
//Die zu schreibende Datei wird angelegt
QFile file_save("test.xml");
file_save.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream out(&file_save);
out <<"<?xml version=''1.0'' encoding=''UTF-8'' ?>"<<"\n";
out <<"<adressen>"<<"\n";
//Die Ursprungsdatei wird zeilenweise verarbeitet. Die Zeile wird an "//" gesplittet und die Werte wandern in eine
//StringList.
//Die Elemente der jeweiligen Zeile werden über einen Index aus der Stringlist ausgelesen und zwischen XML Tags eingefügt.
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
QStringList felder = line.split("//");
out <<"<datensatz>\n";
out <<"<anrede>" << felder.at(0).constData() << "</anrede>"<<"\n";
out <<"<name>" << felder.at(1).constData() << "</name>"<<"\n";
out <<"<art>" << felder.at(2).constData() << "</art>"<<"\n";
out <<"<strasse>" << felder.at(3).constData() << "</strasse>"<<"\n";
out <<"<ort>" << felder.at(4).constData() << "</ort>"<<"\n";
out <<"</datensatz>\n";
}
out <<"</adressen>"<<"\n";
file_save.close();
//Zur Übersicht werden die Daten der Quelldatei in einer texEdit angezeigt.
ui->textEdit->setText(file.readAll());
file.close();
//Die generierte XML-Datei wird in einer zweiten textEdit angezeigt
QFile file_load("test.xml");
file_load.open(QIODevice::ReadOnly | QIODevice::Text);
ui->textEdit_2->setText(file_load.readAll());
file_load.close();
}
main.cpp:
Code: Alles auswählen
#include <QtGui/QApplication>
#include "hauptfenster.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Hauptfenster w;
w.show();
return a.exec();
}
Hat jemand eine Idee? Das Programm kompiliert wie gesagt ohne Probleme...
Grüße und gute Nacht
Timo