Text in Zeile ändern
-
Zeile in string einlesen:
http://www.cplusplus.com/reference/string/getline.html
Kein Problem.
Und einen string zu bearbeiten kannst du mit den Funktionen machen:
http://www.cplusplus.com/reference/string/string/Für dich sind wahrscheinlich die find und replace Sachen von nützen.
Für ein grosses Beispiel bin ich Heute zu faul. Sorry.

Mit ein wenig Geduld, solltest du dich dort mit den Beispielen zurecht finden.Falls du noch ein wenig mehr Funktionen brauchst, kannst du dir die mal anschauen:
http://www.cplusplus.com/reference/algorithm/Funktionieren auch auf normale Container und nicht nur string.
-
drakon schrieb:
Zeile in string einlesen:
http://www.cplusplus.com/reference/string/getline.html
Kein Problem.
Und einen string zu bearbeiten kannst du mit den Funktionen machen:
http://www.cplusplus.com/reference/string/string/Für dich sind wahrscheinlich die find und replace Sachen von nützen.
Für ein grosses Beispiel bin ich Heute zu faul. Sorry.

Mit ein wenig Geduld, solltest du dich dort mit den Beispielen zurecht finden.Falls du noch ein wenig mehr Funktionen brauchst, kannst du dir die mal anschauen:
http://www.cplusplus.com/reference/algorithm/Funktionieren auch auf normale Container und nicht nur string.
Also ich denke, dann muss ich aus dem String an der x-ten Stelle die Zeichen herauskopieren("|" und Datum) und in einen anderen String kopieren, nun gebe ich im originall string den neuen Text ein und kopiere an der x-ten stell wieder den zweiten String hinein, denk ich da rcihtig?

Dafür brauche ich die zwei Befehle, oder welche?
-
Anita80 schrieb:
Also ich denke, dann muss ich aus dem String an der x-ten Stelle die Zeichen herauskopieren("|" und Datum) und in einen anderen String kopieren, nun gebe ich im originall string den neuen Text ein und kopiere an der x-ten stell wieder den zweiten String hinein, denk ich da rcihtig?

Dafür brauche ich die zwei Befehle, oder welche?
Wenn ich dich richtig verstehe ja so in etwa..(ich weiss ja nicht, was du bearbeiten willst.

Wenn du wirklich komfortablen solche strings bearbeiten willst, empfiehlst sich eine regex-Bibliothek zu nutzen, wie z.B boost::regex
Brauch aber auch eine gewisse Einarbeitungszeit.

-
drakon schrieb:
Anita80 schrieb:
Also ich denke, dann muss ich aus dem String an der x-ten Stelle die Zeichen herauskopieren("|" und Datum) und in einen anderen String kopieren, nun gebe ich im originall string den neuen Text ein und kopiere an der x-ten stell wieder den zweiten String hinein, denk ich da rcihtig?

Dafür brauche ich die zwei Befehle, oder welche?
Wenn ich dich richtig verstehe ja so in etwa..(ich weiss ja nicht, was du bearbeiten willst.

Wenn du wirklich komfortablen solche strings bearbeiten willst, empfiehlst sich eine regex-Bibliothek zu nutzen, wie z.B boost::regex
Brauch aber auch eine gewisse Einarbeitungszeit.

Vielen Dank für deine Hilfe, ich probiere jetzt mal ob ich es zustande bekomme.
Gruss
-
Ich lass die Kacke sein, habe den ganzen Abend probiert und konnte nicht einen einzigen Buchstabe von einem string in den anderen kopieren, das nennt man Zeitverschwendung.

-
Anita80 schrieb:
Ich lass die Kacke sein, habe den ganzen Abend probiert und konnte nicht einen einzigen Buchstabe von einem string in den anderen kopieren, das nennt man Zeitverschwendung.

Ganz ruhig.. Geh schlafen und schau dir die Beispiele Morgen nochmal an und wenn es nicht klappt, poste das, was du nicht verstehst hier. (Und bitte möglichst genau, was du willst.. das löst meistens die Frage eigl. schon selbst.. ;))
-
drakon schrieb:
Anita80 schrieb:
Ich lass die Kacke sein, habe den ganzen Abend probiert und konnte nicht einen einzigen Buchstabe von einem string in den anderen kopieren, das nennt man Zeitverschwendung.

Ganz ruhig.. Geh schlafen und schau dir die Beispiele Morgen nochmal an und wenn es nicht klappt, poste das, was du nicht verstehst hier. (Und bitte möglichst genau, was du willst.. das löst meistens die Frage eigl. schon selbst.. ;))
Das Problem ist die Zeit...
Ich habe probier, ein String in einen anderen zu kopieren. Einfach die zeichen und leerzeichen von anfang an zu ersetzen, so dass es mir nichts verschiebt, dann wäre mein Problem gelöst...Aber eben.Und die blöden Internetseiten wo das erklärt ist sind auch noch in english...
-
substr könnte nützlich sein:
http://www.cplusplus.com/reference/string/string/substr.htmlinsert für das einfügen:
http://www.cplusplus.com/reference/string/string/insert.htmlund replace auch:
http://www.cplusplus.com/reference/algorithm/replace_if.htmlSchau auch da die Beispiele an. Die sind sehr einfach und verständlich. Zwar in Englisch, aber da kommst du bei guten Tuts eh nicht drum herum..
-
Hallo!
Ich mal versucht ne Loesung fuer dich zu programmieren, vielleicht hilfts dir (hoffe ich hab das alles richtig verstanden):#include <iostream> #include <fstream> #include <string> #include <vector> #include <cstddef> using namespace std; const short CHARNUM = 60; //Abstand bis zum Datum etc. string GetLine(string); string GetRest(string); int main() { string filename, zeile, neuerinhalt; char ifchange; ifstream inp; ofstream outp; vector<string> inhalt; cout << "Dateiname eingeben: "; cin >> filename; cout << "\n"; inp.open(filename.c_str(), ios::binary | ios::in); if (!inp) { cerr << "Es ist ein Fehler beim Lesen der Datei aufgetreten!"; return -1; } while (!inp.eof()) { getline(inp, zeile); inhalt.push_back(zeile); } inp.close(); outp.open(filename.c_str(), ios::binary | ios::out); if (!outp) { cerr << "Es ist ein Fehler beim oeffnen der Datei im Schreibmodus aufgetreten"; return -1; } cout << "\nZeilenweises aendern der Datei\n\n"; for (size_t i=0; i<inhalt.size(); i++) { cout << "Aktueller Inhalt der Zeile " << i+1 << ":\n" << GetLine(inhalt[i]) << endl; cout << "Zeile aendern(j/n)? "; cin >> ifchange; if (toupper(ifchange) == 'J') { cout << "\n\nNeuer Zeileninhalt eingeben: "; cin >> neuerinhalt; for (size_t a=neuerinhalt.size(); a<CHARNUM; a++) neuerinhalt += " "; inhalt[i] = neuerinhalt + GetRest(inhalt[i]); } outp << inhalt[i]; cout << "\n\n"; } outp.close(); cout << "Bearbeitung beendet! Bitte ENTER druecken zum beenden ..."; cin.get(); return 0; } string GetLine(string line) { string temp; for (size_t i=0; i<line.size() && i<CHARNUM; i++) temp.push_back(line[i]); return temp; } string GetRest(string line) { string temp; for (size_t i=CHARNUM; i<line.size(); i++) temp.push_back(line[i]); return temp; }Der Inhalt der Testdatei sieht so aus:
Text | 27.01.09 16:50:33 |Gruesse,
Cartman
-
Vielen Dank Eric Cartman und drakon für eüre riesen Mühe.
Das finde ich so lieb das ihr mir helft.Leider muss ich jetzt in die Schule, aber ich schaus mir bestimmt am Abend an.
Schönen Tag wünsche ich eüch noch, bis am Abend...
Gruss
-
Hallo Eric
Ich habe nun deine Funktion probiert, leider funktioniert sie bei mir nicht, kannst du mir nochmals helfen???
Ich zeig dir mal die Fehler die es mir anzeigt.
Zeile 54: C:\C++Programm\funktionen.cpp no matching function for call to `getline(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
Zeile 63: C:\C++Programm\funktionen.cpp `CHARNUM' undeclared (first use this function)
Zeile 66: C:\C++Programm\funktionen.cpp `GetRest' undeclared (first use this function)
Und noch andere...
Ich habe deine Programmbibliotheken auch übernommen, daran kann es nicht liegen?Gruss
-
Hallo Anita.
Was hast du denn genau gemacht? Versuchst du das gerade in eine Header-Datei zu binden? Musst mich einwenig aufklaeren
-
Eric Cartman schrieb:
Hallo Anita.
Was hast du denn genau gemacht? Versuchst du das gerade in eine Header-Datei zu binden? Musst mich einwenig aufklaeren
In meine "aendern()" Funktion habe ich sie 1:1 übernommen.
Und diese rufe ich dann im main(), per Switch Funktion auf, oder hatte das jedenfalls vor.
-
Was genau hast du uebernommen? Welchen Teil des Codes?
Ich geh mal davon aus du meinst eine Funktion um den text zu aendern:void SetLine(string& inhalt, string inhaltneu) { for (size_t a=inhaltneu.size(); a<CHARNUM; a++) // ggf. Leerzeichn hinzufuegen inhaltneu += " "; while (inhaltneu.size() > CHARNUM) // falls String zu lang ist - dann abschneiden inhaltneu.erase(inhaltneu.end()-1); inhalt = inhaltneu + GetRest(inhalt); }Gruss
Cartman
-
Eric Cartman schrieb:
Was genau hast du uebernommen? Welchen Teil des Codes?
Ich geh mal davon aus du meinst eine Funktion um den text zu aendern:void SetLine(string& inhalt, string inhaltneu) { for (size_t a=inhaltneu.size(); a<CHARNUM; a++) // ggf. Leerzeichn hinzufuegen inhaltneu += " "; while (inhaltneu.size() > CHARNUM) // falls String zu lang ist - dann abschneiden inhaltneu.erase(inhaltneu.end()-1); inhalt = inhaltneu + GetRest(inhalt); }Gruss
CartmanJa genau, ich habe einfach meinen Inhalt gelöscht, der ja sowieso nicht richtig funktionierte und habe deine ganzen Zeilen rüber kopiert.
War das nicht so gedacht?

-
Ich hab mir mal die Muehe gemacht, das ganze etwas mehr "einzupacken". Ich hoffe dadurch wird einiges klarer.
Aus Platzgruenden und der Uebersichtlichkeit halber hab ich einfach so ne Code-Paste-Seite genommen.die "funcs.h"-Headerdatei:
http://rafb.net/p/3LJZZS88.htmldie "funcs.cpp"-Datei:
http://rafb.net/p/JQL7CP51.htmlUnd hier ein Beispiel wie du das ganze einsetzen kannst:
http://rafb.net/p/8eVpB539.htmlGruss
Cartman//edit
lol, jetzt hab ich als Nickname bei der Seite nen Nickname ausmm anderen Forum genommen
-
Eric Cartman schrieb:
//edit
lol, jetzt hab ich als Nickname bei der Seite nen Nickname ausmm anderen Forum genommen
Und jetzt ist der sauer...?

Hey jetzt hats mir funktioniert, toll. Vielen Dank.
Leider zählt es mir jetzt jede Zeile ab, also nicht wie vorhin, dass ich die Nummer eingeben kann.
Kann ich da vielleicht das alte rüber kopieren, verträgt sich das?Gruss
-
Anita80 schrieb:
Leider zählt es mir jetzt jede Zeile ab, also nicht wie vorhin, dass ich die Nummer eingeben kann.
Kann ich da vielleicht das alte rüber kopieren, verträgt sich das?Gruss
Eine gute Möglichkeit und Übung den Code verstehen zu lernen.

Du kannst es ja mal versuchen und wieder posten, wenn du nicht mehr weiterkommst..
-
drakon schrieb:
Anita80 schrieb:
Leider zählt es mir jetzt jede Zeile ab, also nicht wie vorhin, dass ich die Nummer eingeben kann.
Kann ich da vielleicht das alte rüber kopieren, verträgt sich das?Gruss
Eine gute Möglichkeit und Übung den Code verstehen zu lernen.

Du kannst es ja mal versuchen und wieder posten, wenn du nicht mehr weiterkommst..Ok ich versuche es mal zu ändern, kann ja seine dass ich mal Glück habe...

-
Hast du mir nochmals Zeit drauf zu schauen, finde einen Fehler noch nicht, und zwar löscht es mir immer alle Zeilen, bis auf die, die ich eingegeben habe.
Speichert es die anderen nicht mehr?
Hier mal der abgeänderte code.
unsigned int nr; ifstream inp; ofstream outp; string temp, neuinhalt; vector<string> inhalt; string line; char linechange = ' '; inp.open("Ablage.txt", ios::binary | ios::in); if (!inp) { cerr << "Fehler beim oeffnen!"; return -1; } while (!inp.eof()) { getline(inp, temp); inhalt.push_back(temp); } inp.close(); outp.open("Ablage.txt", ios::binary | ios::out); if(!outp) { cerr << "Fehler beim schreiben!"; return -1; } while (getline(inp, line)) { inhalt.push_back(line); } cout << Abst << Abst << Abst << "Zeilennummer (1-" << inhalt.size()-1 << "): "; if (cin >> nr && nr >= 1 && nr <= inhalt.size()) { --nr; cin.ignore(1 << 13, '\n'); } else { return 1; } cout << Abst << Abst << Abst << "Aktueller Inhalt der Zeile" << line << ": " << inhalt[nr] << endl; cout << "\nNeuer Inhalt: "; getline(cin, neuinhalt); SetLine(inhalt[nr], neuinhalt); outp << inhalt[nr] << '\n'; linechange = ' '; outp.close(); return 0; }Gruss