Datei-> Spalte suchen , finden und die komplette Zeile ausgeben
-
Carlos_Hafensänger schrieb:
#include <regex> #include <fstream> #include <iostream> using namespace std; int main() { regex expr( R"(([A-Z0._%+-])",regex_constants::icase); string line, fname; cout <<"Dateiname angeben:"; getline(cin, fname); ifstream file(fname); if(!file){return -1;} smatch m; while(getline(file,line)) { if(regex_search(line,m,expr)) { if(m.size() == 1) { cout << "Angabe:" << m.str(0) <<endl; } } } }
Leute ich sehe mein Fehler nicht ?! der compiliert es mir nicht
AUSGABE : "terminate called after throwing an instance of 'std::regex_error'
what(): regex_error"zu meinem Hauptproblem:
(steht im Titel)Mod-Edit: Code-Tags.
Die Exception wird geworfen, weil dein Regex-Ausdruck nicht korrekt ist (sie wird beim Ausführen des Programms geworfen, dann ist der Kompiliervorgang abgeschlossen).
Th69 hat dich schon auf die richtige Spur gebracht mit seiner Frage nach den zwei Klammern zu Beginn, denn es wird nur eine geschlossen.
Falls du es nicht weisst; mitR"()"
wird ein String-Literal angegeben, welches "raw" ist und nicht escaped werden muss/darf (der eigentliche String kommt zwischen die Klammern). Wobei die Klammern Geschmacksache sind - man könnte AFAIK auch ein anderes Zeichen nehmen (oder sogar mehrere), z. B.R"**"
(der eigentliche String kommt zwischen die Sterne).
-
Wobei die Klammern Geschmacksache sind - man könnte AFAIK auch ein anderes Zeichen nehmen (oder sogar mehrere), z. B. R"**" (der eigentliche String kommt zwischen die Sterne).
C++ ist nicht Perl, wo man String mit
q(string), q!String!, q<String>, q*String*
usw. erzeugen kann.In C++ kommt der String zwischen die Klammern!
R" + irgendwas + ( + eigentlicher String + ) + irgendwas_wiederholt + ";
d.h. folgendes ist identisch:std::cout << R"(hallo welt)" << '\n'; std::cout << R"x(hallo welt)x" << '\n'; std::cout << R"blubberdieblubb(hallo welt)blubberdieblubb" << '\n'; std::cout << R"*+45(hallo welt)*+45" << '\n'; std::cout << R"""""(hallo welt)""""" << '\n';
Man suche sich davon das lesbarste heraus
-
wob schrieb:
...
Hab ich ja geschrieben. Aber danke für die detailliertere Ausführung.
Edit: Ok, ich habe nicht genau das geschrieben, was du jetzt hervorgehoben hast.
Edit2: I agree.
-
Carlos_Hafensänger schrieb:
Wieso kann ich die Schleife ausführen wenn ang ein integer ist und bei String , gibt er mir eine Fehlermeldung aus .
Verstehe ich echt nichtstring.find() gibt die Position des gesuchten Teilstrings zurück
In deiner Bedingung steht:
if(ang=line.find(a)...
Das "=" ist eine Zuweisung. Das Ergebnis von find() wird also "ang" zugewiesen und das geht nicht, wenn "ang" ein string ist.
Du willst vermutlich vergleichen. Das geht mit "==".
-
Sorry , dass ich so spät zurück schreibe .
Danke nochmals für die HilfeHab es jetzt lösen können.
while(getline(Myfile,line)) { istringstream stream(line); vector<string>column; string element; while(getline(stream,element,'\t')) { column.push_back(element); if(((offset = element.find(suchen,0))) != string::npos) { // cout <<"Wort gefunden:\n" << suchen<<"\n"<<element << endl; } } }
Nun habe ich das Problem:
ich kann jetzt nach einem Wort suchen und auch die entsprechende Zeile ausgeben , nur leider würde ich gerne die Spalten der Zeile , die durch ein Kommata getrennt sind , in einzelne Variablen speichern um beispielsweise von einigen bestimmen Spalten den Average ausrechnen zu können
-
Carlos_Hafensänger schrieb:
Nun habe ich das Problem:
ich kann jetzt nach einem Wort suchen und auch die entsprechende Zeile ausgeben , nur leider würde ich gerne die Spalten der Zeile , die durch ein Kommata getrennt sind , in einzelne Variablen speichern um beispielsweise von einigen bestimmen Spalten den Average ausrechnen zu könnenDer Suchbegriff ist "split string". Da sollte es einige Ergebnisse dazu geben...
-
danke
habe es so weit wie möglich geschafft und nun wollte ich int in string umwandeln mit to_string, habe auch mal ein wenig im Internet mich schlau gemacht , leider nichts gefunden.
Ich zeige euch mal mein Codeschnipsel//calc average int length = searchResults.size(); vector<string> result; double secondRow = 0; double thirdRow = 0; for (vector<string> line : searchResults) { secondRow += atoi(line.at(1).c_str()); thirdRow += atoi(line.at(2).c_str()); } //Resultat zusammensetzten result.insert(result.begin(), suchen); result.insert(result.end(),to_string(secondRow / length)); result.insert(result.end(),to_string (thirdRow / length));
die dreizehnten Zeile wird mir als Fehler angezeigt , die Meldung : to_string was not declared in this Scoop
Leider finde ich mei Fehler nicht , habe auch include <sstream>
-
to_string benötigt den Header <string>
-
Habe ich auch im Header , trotzdem geht es nicht
-
C++ 11 einschalten oder neueren Compiler installieren.
-
Habe den Compiler :
GNU GCC Compiler
Have g++ follow the C++11 ISO C++ language Standard [std=c++11]
-
Carlos_Hafensänger schrieb:
Habe den Compiler :
GNU GCC CompilerDir ist aber schon aufgefallen, dass Software (aus gutem Grund) eine Versionsnummer hat?
manni66 schrieb:
C++ 11 einschalten oder neueren Compiler installieren.
-
Muss echt gestehen , dass ich gerade etwas verwirrt bin .
Ich dachte der Compiler wäre der aktuellste und somit auch der Mächtigste.
Könntest du es noch einmal für Dummies erläutern , falls du die Zeit dafür hast
DANKEE
-
Carlos_Hafensänger schrieb:
Könntest du es noch einmal für Dummies erläutern
Hat er doch schon...
Deine Reaktion darauf war:
Muss echt gestehen , dass ich gerade etwas verwirrt bin .
Versteh nicht was genau du noch willst?
-
was mich verwirrt ist die Tatsache, dass ich den C++ Compiler eingeschaltet habe
ich weiss echt nicht ,wie ich es sonst angehen sollte.
-
Carlos_Hafensänger schrieb:
Muss echt gestehen , dass ich gerade etwas verwirrt bin .
Ich dachte der Compiler wäre der aktuellste und somit auch der Mächtigste.
Könntest du es noch einmal für Dummies erläutern , falls du die Zeit dafür hast
DANKEEhttps://gcc.gnu.org/releases.html
Und welches Release hast du bei dir installiert?
-
GCC 6.3
Ich gehe mal stark davon aus, dass ich 7.1 auf CodeBlocks installieren sollte
-
GCC 6.3 ist auf jeden Fall neu genug für C++11.
Siehe https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Standards.html#StandardsGCC supports the original ISO C++ standard published in 1998, and the 2011 and 2014 revisions.
(...)
The default, if no C++ language dialect options are given, is -std=gnu++14.
Wahrscheinlich gibt es in deiner IDE irgendwo einen Schalter zur Auswahl des Sprachstandards. Dein gcc jedenfalls beherrscht jedenfalls C++14 und wählt diesen Standard sogar per Default aus (plus gcc-Erweiterungen).
-
Danke
Ich habe mal etwas geguckt leider nichts gefunden , ich hoffe mal das ich noch fündig werde
-
weg von der Fragestellung
es wäre doch auch einfach möglich ,wenn ich eine andere Funktion dafür einsetze
bspw-> stringstream ss;
ss << number;
string numberasstring(ss.str());ist die Funktion zu laienhaft ?