xtp file durchsuchen
-
Moin, da man mir hier bis jetzt jede Frage beatworten konnte. ( sehr dankbar )
Wollte ich heute etwas doch sehr spezifisches Wissen.
Es geht um xtp Daten ich hoffe es hat sich schon jemand mal damit beschäftigt.Die Frage:
Ich möchte gerne eine Variable in so einer Datei suchen und mir danach denn ganzen Pfad ( den Baum ) ausgeben lassen.Beispiel:
<Allgemeine-Einstellungen>
<test1>
<gesuchte variable>1</gesuchte variable>
</test1>
</Allgemeine-Einstellungen>Nach dem die gesuchte Variable gefunden wurde sollte das Ergebnis in etwa so aussehen.
Allgemeine-Einstellungen- test1- gesuchte variable=1 ( der Pfad )
Danke.
-
Was ist eine XTP Datei? In meinen gefühlten 100 Jahren vor PC ist mir das noch nie untergekommen. Zusammenhang bitte! (Mit welchem Programm hat das was zu tuen?/Mehr info.)
Es gibt xtp dateien die mit html zu tuen haben.
Es gibt xtp Office vorlagedateien.
etc. Wir haben halt keine Glaskugeln
-
HighLigerBiMBam schrieb:
Was ist eine XTP Datei? In meinen gefühlten 100 Jahren vor PC ist mir das noch nie untergekommen. Zusammenhang bitte! (Mit welchem Programm hat das was zu tuen?/Mehr info.)
Es gibt xtp dateien die mit html zu tuen haben.
Es gibt xtp Office vorlagedateien.
etc. Wir haben halt keine Glaskugeln
.. aber Internet

www.endungen.de liefert 'XTreeGold' als einzigen Treffer; Google liefert dazu den Wiki-Eintrag von XTree - dort liegt ein Link, nach dem es XTreeGold nicht mehr gibt ...
-
Ich kann dir garantieren das andere Programme auch sich dieser Endung bedienen

-
nun ja im Grunde ist die Datei so kodiert wie eine xml file.
Wie sie und durch was sie erstellt werden habe ich keinen Einfluss. Mich interessiert nur eine bestimmte variable die in der datei vorkommt. ( oder noch wichtiger ihr pfad )
-
Dateieinlesen -> eingelesene strings auf substring des variablennamen durchsuchen -> bei fund wert einlesen/speichern/verarbeiten
Was du unter Pfad in xml verstehst entzieht sich meiner Vorstellungskraft. Aber dass sollte auch kein Problem sein.
Als Hilfestellung: http://www.cplusplus.com/reference/iostream/istream/
-
HighLigerBiMBam schrieb:
Was du unter Pfad in xml verstehst entzieht sich meiner Vorstellungskraft. Aber dass sollte auch kein Problem sein.
In seinem Beispiel wohl:
* Allgemeine-Einstellungen
** test1
*** gesuchte variableEs gibt diverse XML-Bibliotheken für C++ (Da ich bislang keine brauchte, müssten hier wenn andere passende nennen...).
-
asc schrieb:
HighLigerBiMBam schrieb:
Was du unter Pfad in xml verstehst entzieht sich meiner Vorstellungskraft. Aber dass sollte auch kein Problem sein.
In seinem Beispiel wohl:
* Allgemeine-Einstellungen
** test1
*** gesuchte variableEs gibt diverse XML-Bibliotheken für C++ (Da ich bislang keine brauchte, müssten hier wenn andere passende nennen...).
Ich befürchte, dass dies seine bisherigen Kenntnisse übersteigt.
Wenn der Autor hardcore XML will dann suche dir etwas aus: http://lars.ruoff.free.fr/xmlcpp/
-
puuu harte kost
-
Hamster schrieb:
puuu harte kost
Wo wir dann wieder bei der einfacheren Lösung wären die Datei einzulesen und selbst auszuwerten.
-
Denke ich werde einen Algorithmus scheiben.
Könnte so aussehen.
Hier die xml codierung: http://upload.wikimedia.org/wikipedia/commons/e/e9/XML_(de).svg
Der mögliche Pseudo code:
-Datei öffnen.
-Beginne am datei Anfang.
-Suche nach <
- lese bis > und schreibe in variable[1]
- Beginne am Ende und suche nach </ lese bis > ist die variable[2] ==variable[1]
- suche dazwischen nach der gesuchten Variable ist sie dazwischen ist der erste pfad variable[1]
Wird die gesuchte Variable nicht gefunden springe zum anfang der datei + die Strecke bis variable 1.Dachte mir es könnte gehen wenn ich die datei von außen nach innen durchsuche. Wenn es klappen sollte werde ich denn code hier posten.
-
Dein Ansatz sollte funktionieren und ausreichend sein.
-
fehler
-
Hi, habe fast alles fertig. Jedoch gibt es etwas was keinen Sinn ergibt.
: Das Vorgehen:
Die xtp wird gelesen. Danach suche ich nach dem zeichen < und kopiere die variable bis > in ordner. Danach suche ich die variable </ordner>. Ist diese Variable weiter weg als die gesuchte variable kopiere ich den ordner in path.Mein Problem:
Füge ich cout oder for() ändert sich das Ergebnis. (( schaut ganz unten unter hier ))#include <stdafx.h>
#include <iostream> // für Cout
#include <fstream> // für Open
#include <stdio.h>
#include <conio.h> // für getchar
#include <string>using namespace std;
void main()
{
char variable[1000]; // zwischenspeicher für die gesammte xtp file
char zeichen[1000]; //Zeiger auf xtp file
int weiter=0; // Nur zum kopieren in den zwischenspeicher
char ordner[100]; //gelesener Ordner
int or=0,save=0;
int größe;
char zwischending[100]; //Einfügen von </ in denn Ordner
string path; // Hier wird er path gespeichert// Lesen der xtp file
FILE *fil;
fil = fopen("c:\\xtp.xtp", "r");
if (fil == NULL)
{
printf("\nDatei kann nicht geöffent werden\n");
exit(-1);
}while(!feof(fil))
{
weiter++;
fscanf(fil, "%c", &zeichen);
if (!feof(fil))
//printf("%c", *zeichen);
variable[weiter]=*zeichen;
}
variable[weiter]='\0';// Suche nach < in der xtp file und kopiere alles in ordner bis >
for(int i=save;i<weiter;i++)
{
if(variable[i]=='<')
{for(int b=i+1;b<weiter-i;b++)
{
if(variable[b]!='>')
{
ordner[or]=variable[b];
or++;
save++;
}
else{ ordner[or]='\0';break ;}
}
break;
}
}string gesammt(variable); //erzeugen der string von der gesammten xtp file
cout <<gesammt;// Anladen er </
größe = sizeof(ordner) / sizeof(int);
zwischending[0]='<';
zwischending[1]='/';for(int c=2;c<größe+2;c++)
{
zwischending[c]=ordner[c-2];
} zwischending[größe+1]='>';
string zwischendingg(zwischending);
cout <<zwischendingg;
// zwischending halt die die kodierung </Ordner>//gefundener ordner
string ordnerr(ordner);
cout <<"Der erste Ordner"<<endl;
cout <<ordnerr<<endl;//suche nach </Ordner>
int pos=gesammt.find(zwischendingg);
printf("Ordner String %i\n",pos);//suche nach dem gesuchten string
string gesuchterstring ="anfangswerte";
int ges=gesammt.find(gesuchterstring);
printf("Gesuchter String muss kleiner sein als Ordner %i\n",ges);//schauen ob der gesuchte string darunter liegt
if(ges<pos)
{
path=ordnerr;
}//else cout << "Der gesuchte String befindet sich nicht in "<<ordnerr<<endl;
cout << "Der Path ist "<<path<<endl; // <---- SCHAUT HIER-----------fclose (fil);
system("pause");
};ps: um jetzt weiter zu machen müßte ich eine äußere schleife einbauen füge ich for (int i=0;i<1;i++) ändert sich das ergebniss ?????
-
habe auf geändert. Schaue wie ich weiter vorankomme. Wer verbesserungsvorschläge hat immer he damit.
while(!feof(fil))
{
fscanf(fil, "%c", &zeichen);
if (!feof(fil))
//printf("%c", *zeichen);
variable[weiter]=*zeichen;
weiter++;
}
variable[weiter]='\0';
-
*palmface* möchtest du c++ programmieren oder willst du nicht doch lieber C programmieren? Der Code macht echt nicht glücklich.
Du mixst C-printf mit c++ cout -> nicht gut. Besser alles cout...
Du benutzt C-FILE anstelle von c++ STL fstream.Auf chars und Arrays sollte und kann man in c++ komplett verzichten...
Den Rest habe ich mir nicht angeschaut. Ich denke das sind die Hauptgründe warum hier niemand einen Verbesserungsvorschlag macht, weil es schlicht sinnlos scheint. Nichts gegen dich, aber wir kennen den Grund "Jürgen Wolf".
-
ja bei mir ist erstmal c und c++ ein mix werde später daraus nur c oder c++ machen. Wollte zu erst alles mit fstream stream machen jedoch hatte ich das problem damit das ich nur mit strings arbeiten konnte.
Jedoch mu0te ich von < bis > einlesen was ich nicht mit strings machen kann
-
Sicher kann man das mit string machen!
http://www.cplusplus.com/reference/string/string/find/
http://www.cplusplus.com/reference/string/string/substr/Suche "<" und suche ">",
lese ein von position "<" bis länge ">" - "<"Warum sollte das nicht gehen?
-
ich wusste nichtr wie das geht
-
Hamster schrieb:
ich wusste nichtr wie das geht
Du kannst immer fragen :), wie gesagt es ist nicht dein Fehler, aber du solltest versuchen dein Programm mit den Mitteln von c++ zu schreiben.
Ich hoffe du kannst mit den Tipps von oben dein Programm auf fstream string und cout umschreiben und die C-Code entfernen.
Deshalb sagt ich ja, du solltest dir ein Buch über die STL besorgen. Wenn du weitere Hilfe brauchst, dann frag ruhig. Aber vermeide dieses Mischen komplett!
EDIT: Und bitte verwende c/c++ Codetags!