Auslesen von Taggs

Alles rund um die Programmierung mit Qt
Antworten
Mefisto
Beiträge: 27
Registriert: 6. September 2008 13:37

Auslesen von Taggs

Beitrag von Mefisto »

Hallo!

Ich bin ziemlicher Anfänger, außerdem erst 15 und habe nicht Informatik studiert ;)... Also verzeiht mir bitte, wenn diese Frage dämlich ist ;)

Ich bin dabei in einer Funktion (alles C++ und QT) ein Verzeichnis mit Dateien auszulesen. Innerhalb dieser Dateien habe ich Informationen in Tags gespeichert.

Bisher hat das Verzeichnis nur eine Test-Datei, also die Schleife ist erstmal nicht so wichtig. Das Script kommt bis zu dem Auslesen per RegExp, da spinnt dann aber alles rum. Also alles funktioniert, bis auf das Zeilenweise Auslesen der Datei. Dort wird bei der If-Abfrage auf den Negativen Wert von RegExp die "Else-Anweisung" ausgeführt. Die Debug-Werte, die ich dort eingefügt habe (also die Position der ID, die Position des Taginhaltes und die Länge des Taginhaltes) werden als y mit den Umlaut-Pünktchen trüberausgegeben... Sonderbar?
Natürlich ist die Funktion noch nicht fertig und ich habe zum Testen, ob bis dahin alles klappt, ein abruptes Ende gemacht (Array, in dem die Tags gespeichert werden sollten, wird einfach nur ausgegeben)... Aber darum gehts mir ja auch erstmal noch nicht...

Vielen Dank also schonmal für Hilfe :)

Jonathan


P.S.: Der Inhalt einer Datei sieht so aus:

<trigger 1>Hier steht irgenein Tag-Content</trigger>
<trigger 2>Einfach ein weiterer Tag...</trigger>
etc...

Code: Alles auswählen

QString parse(QString input, QString language)
{
	language = "de";
	QString output;
	QVector<QString> parsebase;
	
	QString languagedir = QCoreApplication::applicationDirPath()+"/language/"+language;
	QDir dir(languagedir);
	if (!dir.exists()) { return "Can't find the language directory! "+languagedir+" doesn't exist."; }
	
	dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
	QFileInfoList list = dir.entryInfoList();

	for (int i = 0; i < list.size(); ++i) {
		QFileInfo fileInfo = list.at(i);
		QString filepath = fileInfo.absoluteFilePath();
		
		QFile file(filepath);
		if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return "Unreadable file at "+filepath+". Check Repository!"; }

		while (!file.atEnd()) {
			int positiontriggerid;
			int positiontriggercontent;
			int positiontriggercontentlength;
			QString treid("\\<trigger.([1-9])\\>.*\\<\\/trigger\\>");
			QString treco("\\<trigger.[1-9]\\>(.*)\\<\\/trigger\\>");
			QByteArray lineinbytes = file.readLine();
			QString line(lineinbytes);
			
			QRegExp rxid(treid, Qt::CaseInsensitive, QRegExp::RegExp2);
			QRegExp rxco(treco, Qt::CaseInsensitive, QRegExp::RegExp2);
			
			positiontriggerid = rxid.indexIn(line);
			positiontriggercontent = rxco.indexIn(line);
			positiontriggercontentlength = rxco.matchedLength();
			
			if((positiontriggerid != -1) && (positiontriggercontent != -1) && (positiontriggercontentlength != -1)) {
				QString triggerid = line.mid(positiontriggerid,1);
				QString triggercontent = line.mid(positiontriggercontent,positiontriggercontentlength);
				parsebase.append("Trigger id: "+triggerid+" ... Trigger content: "+triggercontent);
			} else {
				return "Wrong trigger alignment in "+filepath+"<br />Trigger id: "+positiontriggerid+" ... Trigger content: "+positiontriggercontent+" ... Trigger content length: "+positiontriggercontentlength;
			}
		}
		
	}
	
	for(int i=0; i<parsebase.size(); i++)
	{
		output.append(parsebase.at(i));
	}
	return output;
}
[/code]
Mefisto
Beiträge: 27
Registriert: 6. September 2008 13:37

Beitrag von Mefisto »

Hm sorry, vergesst es... Das war ziemlich blöde gedacht, natürlich bricht das Script sofort ab, wenn in der auszulesenden Datei was enthalten ist, was nicht auf das Muster passt... Sorry...
Mefisto
Beiträge: 27
Registriert: 6. September 2008 13:37

Beitrag von Mefisto »

Ich habe aber trotzdem noch eine Frage.

Mein RegExp-Abfrage sollte eigentlich nur den eingeklammerten Wert auslesen. Stadtdessen wird immer die Position des Vorkommens der kompletten Abfrage ausgegeben. Wie ändere ich das?
Antworten