zoidberger
Mitglied
Hallo Leute!
Ich hab letztens schonmal gefragt wegen ein paar kleineren Problemen mit Regex++.
jetzt bin ich aber langsam soweit, dass ich am zweifeln bin ob diese Entscheidung richtig war.
Ich erklär mal kurz mein(e) Probleme:
ich lese aus einer art ini datei zeilenweise aus und überprüfe diese zeilen mit regex ob es erlaubte "tags" sind. zB sieht ein erlaubter tag so aus: test = "Hallo"
Also habe ich einen regulären ausdruck:
Ds funktioniert einwandfrei.
Als nächstes sollte ich explizit schauen was es denn für ein tag ist:
Das würde zB ein tag wie func = "TEST1" finden.
Jetzt will ich wissen, was zwischen den Hochkommas steht.
Ich weiß ab jetzt echt nichtmehr, ob ich das (wenn ja wie) mit regex schaffe oder ob es einfacher wär, das mit string operationen von c++ zu machen.
Googeln zeigte mir auch einige Möglichkeiten auf, allerdings keine, die ich jetzt per anhieb verstanden hab
Das ganze war aber noch lange nicht alles...
Diese Werte sind nicht einfach Werte, sie sind von den anderen nachfolgenden Tags abhängig. zB. Wenn bei func = "TEST1" steht, sollte bei "min" und "max" jeweils eine Zahl zwischen 0 und 100 stehen. Bei TEST2 aber zwischen 0 und 300... zudem sollte hinter die zahl noch ein k oder M für kilo und Mega gehängt werden können... (also das Programm soll das verstehn und dann bei einem "k" die Zahl mit 1000 multiplizieren)
ich hoffe mal, das war jetzt nicht zuviel Info auf einmal und ihr könnt mir da einen Tip geben in welche richtung ich nun weitergehen soll.
Wenn das alles mit regex machbar ist, würde ich mich über ein einfaches "Ja" freuen, allerdings wär ich mit ein paar anhaltspunkten überglücklich
grüße!
//EDIT1:
Schade, dass noch keiner geantwortet hat..
Ich halte euch trotzdem mal auf dem Laufenden:
Ich hab nun etwas gecheatet... also das ist auf keinen fall eine akzeptable lösung
hier mal ein codebeispiel für den tag min = "4.5M"
Ihr seid wohl mit mir einer meinung wenn das nicht die beste lösung ist...
hat denn keiner ein Beispiel, in dem man ein pattern aus einem string sucht und ausschneidet?
cya
Ich hab letztens schonmal gefragt wegen ein paar kleineren Problemen mit Regex++.
jetzt bin ich aber langsam soweit, dass ich am zweifeln bin ob diese Entscheidung richtig war.
Ich erklär mal kurz mein(e) Probleme:
ich lese aus einer art ini datei zeilenweise aus und überprüfe diese zeilen mit regex ob es erlaubte "tags" sind. zB sieht ein erlaubter tag so aus: test = "Hallo"
Also habe ich einen regulären ausdruck:
Code:
//irgendwas_´whitespaces_=_whitespaces_"_irgendwas_"
boost::regex tagAndValue ( "(.*)\\s*=\\s*\"(.*)\"" );
Als nächstes sollte ich explizit schauen was es denn für ein tag ist:
Code:
boost::regex TESTfunc ( "\\s*(func)\\s*=\\s*\"(TEST1|TEST2|TEST2|TEST3)\"" );
Jetzt will ich wissen, was zwischen den Hochkommas steht.
Ich weiß ab jetzt echt nichtmehr, ob ich das (wenn ja wie) mit regex schaffe oder ob es einfacher wär, das mit string operationen von c++ zu machen.
Googeln zeigte mir auch einige Möglichkeiten auf, allerdings keine, die ich jetzt per anhieb verstanden hab
Das ganze war aber noch lange nicht alles...
Diese Werte sind nicht einfach Werte, sie sind von den anderen nachfolgenden Tags abhängig. zB. Wenn bei func = "TEST1" steht, sollte bei "min" und "max" jeweils eine Zahl zwischen 0 und 100 stehen. Bei TEST2 aber zwischen 0 und 300... zudem sollte hinter die zahl noch ein k oder M für kilo und Mega gehängt werden können... (also das Programm soll das verstehn und dann bei einem "k" die Zahl mit 1000 multiplizieren)
ich hoffe mal, das war jetzt nicht zuviel Info auf einmal und ihr könnt mir da einen Tip geben in welche richtung ich nun weitergehen soll.
Wenn das alles mit regex machbar ist, würde ich mich über ein einfaches "Ja" freuen, allerdings wär ich mit ein paar anhaltspunkten überglücklich
grüße!
//EDIT1:
Schade, dass noch keiner geantwortet hat..
Ich halte euch trotzdem mal auf dem Laufenden:
Ich hab nun etwas gecheatet... also das ist auf keinen fall eine akzeptable lösung
hier mal ein codebeispiel für den tag min = "4.5M"
Code:
temp = "";
remove_copy (str.begin(), str.end(), back_inserter(temp), ' ');
str = "";
remove_copy (temp.begin(), DMMtemp.end(), back_inserter(str), '=');
temp = "";
remove_copy (str.begin(), str.end(), back_inserter(temp), 'm');
str = "";
remove_copy (temp.begin(), temp.end(), back_inserter(str), 'i');
temp = "";
remove_copy (str.begin(), str.end(), back_inserter(temp), 'n');
str = "";
remove_copy (temp.begin(), temp.end(), back_inserter(str), '"');
Ihr seid wohl mit mir einer meinung wenn das nicht die beste lösung ist...
hat denn keiner ein Beispiel, in dem man ein pattern aus einem string sucht und ausschneidet?
cya
Zuletzt bearbeitet: