Auslesen von Taggs
Verfasst: 22. Februar 2009 12:31
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]
Ich bin ziemlicher Anfänger, außerdem erst 15 und habe nicht Informatik studiert
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;
}