Streams benutzen(2 fragen)
-
hi
kann mir jemand bitte sagen, wie ich:
1 >> In einer Datei ein bestimmten String bzw. ein bestimmtes Wort finden kann? (also zbsp. ich hab ne test.txt Datei und dort hab ich folgendes stehen:
Hallo "HAHA"
test test4
passwort: 31und ich prüfen will ob nach "Hallo" das Wort inkl. " " => "HAHA" steht oder ein anderes Wort. Ist es ein anderes Wort, so wird ein Text "nicht haha" ausgegeben, sonst "ok".)
__________________________________________________________________________
2 >> In eine Datei vor oder nach einen String ein bestimmtes Wort einzufügen.Wäre nett wenn mir jemand helfen könnte

Mit bestem dank im voraus,
_asm
-
1. In String einlesen, und nach den Worten durchsuchen. Oder falls es Zeilenweise praktischer wäre, den Stream per std::getline() in einen vector einlesen und jede einzelne zeile durchgehen.
2. Im Prinzip das gleiche; Datei in einen String lesen, ersetzen/einfügen und wieder zurückschreiben.
-
sorry, aber ich weiß nicht wie ich das realisieren soll.
Folgendes hab ich schon probiert:void find(std::string file, std::string name) { std::ifstream output; output.open(file.c_str()); for(std::string::iterator x = name[x]; x != name; ++x) { if(x == name) { std::cout << "GEFUNDEN"; } else { std::cout << "Suche .." << std::endl; } } }funktioniert aber nicht, da compilererrors.
kannst du mir einmal zeigen, wie es geht?
ich weiß nichtmal was du mitIn String einlesen, und nach den Worten durchsuchen
meinst

mfg
-
void find(std::string file, std::string name) { std::ifstream output; output.open(file.c_str()); std::vector<std::string> source; for(std::string::size_type x = 0; x != source.size(); ++x) { source.push_back(output); } }scheint auch nicht zu klappen

Kannst du mir wenigstens Tipps geben? oder den code?
mfg
-
push

-
Eigentlich sollte man nach so einem dreisten gepushe garnichts mehr sagen... aber nagut:
void find(std::string file, std::string name) { std::fstream output; output.open(file.c_str()); std::vector<std::string> source; while(output.good()) { std::string line; std::getline(output, line); if(line.find(name) != std::string::npos) { std::cout << "gefunden!" << std::endl; break; } } }So oder so ähnlich müsste es passen.
-
#include <fstream> #include <string> // ... bool find(const std::string& filename, const std::string& data) { std::ifstream input(filename.c_str()); // Datei öffnen if (!input) return false; std::string line; // Soll die Zeile reingelesen werden while (std::getline(input, line)) // Zeile aus input(Datei) in line(String) lesen ... if (line.find(data) != std::string::npos) // Wenn data(String) vorhanden return true; // erfolgreich return false; // nicht da ... }...
Für 1:
std::string const& get_value(const std::string& filename, const std::string& var) { std::ifstream input(filename.c_str()); if (!input) throw std::invalid_argument("could not open file"); std::string line; while (std::getline(input, line)) { std::size_t pos = line.find(var); pos = line.find_first_not_of(' ', pos); if (pos != std::string::npos) return line.substr(pos); } throw std::runtime_error("var not set"); }int main() { try { std::cout << get_value("test.txt", "Hallo") << std::endl; } catch(std::exception& ex) { std::cerr << "FEHLER: " << ex.what() << std::endl; } };...
-
'getline': Ist kein Element von 'std'
und der bezeichner wurde nicht gefunden:bool find(const std::string& file, const std::string &data) { std::fstream read; read.open(file.c_str()); if(!read) { std::cerr << "File couldn't be found." << std::endl; return false; } std::string line; while(std::getline(read, line)) { if(line.find(data) != std::string::npos) { std::cout << "Gefunden" << std::endl; return true; } } return false; }
-
#include <string>
-
THX HAT GEKLAPPT!
nur noch letzte frage: wie kann ich noch im nachhinein einen text an eine bestimmte stelle schreiben?
habs so versucht:bool find(const std::string& file, const std::string &data) { std::fstream read; read.open(file.c_str()); if(!read) { std::cerr << "File couldn't be found." << std::endl; return false; } std::string line; while(std::getline(read, line)) { if(line.find(data) != std::string::npos) { std::cout << line.find(data) << std::endl; std::cout << "Gefunden, edit" << std::endl; read << "HALLO"; // einfach durch read return true; } } return false; }erscheint dann aber nicht in der file

-
Tja ... also du solltest den Code den ich dir gegeben habe nicht verschlimmbessern ...
Zu deinem Problem: read ist weder als std::ios::in noch als std::ios::out geöffnet ... also solltest de vllt mal setzen -.-