aus .txt Buchstabenweise auslesen, ändern und wieder speichern

Lemieux66

Mitglied
Hallo zusammen, ich habe hier ein Code den ich von hier habe.

Da wurde mir erklärt wie ich zeilenweise aus einer .txt lese, ändere und wieder speichere, also mit vector.

Jetzt ist aber mein Problem, dass ich nicht die ganze Zeile ändern möchte, nur einen Teil, und was auch noch wichtig ist, beim wieder einlesen darf es mir die vorhandenen Zeichen nicht verschieben, also quasi wie mit dem Befehl setw().

Ich habe vorhin auch gelesen, dass ich die Zeilen Buchstabenweise auslesen könnte, ändern und wieder speichern, würde das in meinem Fall auch gehen?

Ich stell eüch mal meinen vorhandenen Code hinein:

Code:
  unsigned int nr;
  string line;
 
  fstream file("Ablage.txt", ios::in);
 
  if (!file.is_open()) 
  
  {
    return 1;
  }
  
  vector<string> content;
 
  while (getline(file, line)) 
  
  {
        
    content.push_back(line);
    
  }
 
  cout  <<  "Zeilennummer (1-" << content.size() << "): ";
  
  if (cin >> nr && nr >= 1 && nr <= content.size()) 
  
  {
          
    --nr;
    cin.ignore(1 << 13, '\n');
    
  } 
                 else 
                 {
                      
                 return 1;
                 
                 }
                 
  cout   <<  "Aktueller Inhalt der Zeile" << line 
  << ": " << content[nr] << endl;
  
  cout   <<  "Bitte neuer Inhalt eingeben: ";
  
  if (!getline(cin, content[nr])) 
  
  {
                    
    return 1;
    
  }
  
    
  file.close();
  file.clear();
 
  file.open("Ablage.txt", ios::out | ios::trunc);
 
  copy(content.begin(), content.end(),
           ostream_iterator<string>(file, "\n"));
  
  return 0;
}


Danke und Gruss
 
Schade , kann mir niemand helfen:(

Weiss dann vielleicht jemand was ich in die Schleife eingeben muss um von der Datei die Buchstaben einzeln auszulesen?

Gruss
 
Also ich kenn mich hier nicht ganz so genau aus, aber du müsstest vermutlich den Modus, wie du die Datei öffnest, auf ios::in | ios::out ändern
Zum Positionieren, des internen Zeiger, in der Datei, ist vermutlich fseekg() und tellg() hilfreich.
Zum einzelnen Zeichen auslesen, müsstest dir mal put() und get() anschauen.

http://www.cplusplus.com/reference/iostream/fstream/
 
Schade , kann mir niemand helfen:(
Nein. Du wüßtest vermutlich nichts mit der Hilfe anzufangen und du hast auch nicht gut genug beschrieben was du überhaupt machen willst.
Weiss dann vielleicht jemand was ich in die Schleife eingeben muss um von der Datei die Buchstaben einzeln auszulesen?
Was soll das bringen die Zeichen nun plötzlich einzeln auszulesen? Du hast die Datei doch (im Grunde) komplett 1:1 im vector. Da kannst du die Zeilen doch beliebig verändern - auch zeichenweise. Evtl. solltest du dir erstmal klar machen was du überhaupt willst, und wie das zu bewerkstelligen wäre.

Vermutlich willst du ja den Wert einer bestimmten Spalte und Zeile in einer Tabelle ändern. Wenn das so ist, warum schreibst du das nicht? :mad:

Gruß
 
Nein. Du wüßtest vermutlich nichts mit der Hilfe anzufangen und du hast auch nicht gut genug beschrieben was du überhaupt machen willst.

Kann schon sein das ich es nicht richtig verstehe, aber probieren kann ich's ja.

Ich will in einer bestimmten Zeile den Text ändern und in der Zeile hat es noch eben andere Zeichen, die genau so bleiben sollen und auch nicht verschoben werden dürfen.
Darum muss z.b. die Zeile Buchstabe für Buchstabe auslesen, den Text neu eingeben und danach wieder mit dem richtigen Abstand speichern, damit mir das Gesamtbild der Zeile so bleibt.

Deswegen dachte ich, dass es die beste Lösung ist, wenn ich einzeln auslese und wieder einzeln speichere!?

Evtl. solltest du dir erstmal klar machen was du überhaupt willst, und wie das zu bewerkstelligen wäre.

Darum habe ich ja auch die Frage gestellt...

Ich habe vorhin auch gelesen, dass ich die Zeilen Buchstabenweise auslesen könnte, ändern und wieder speichern, würde das in meinem Fall auch gehen?

Ich weiss eben nicht was die beste Lösung für mein Problem ist.



Gruss
 
Hallo, könntest du vielleicht mal ein Beispiel posten wie die .txt-Datei auszusehen hat? Irgendwie ist mir da nicht ganz klar warum du es zeichenweise einlesen möchtest. Ich bin da der gleichen Meinung wie deepthroat, warum änderst du nicht die Zeichen im Vektor und überschreibst dann die entsprechende Zeile in der Textfile?
Poste am besten mal ein Beispiel wie die Textfile aussieht, vielleicht wird es dann klarer ;-)

Gruß Phil
 
Ich stell mal ein Screenshot hinein von meinem Progi.

Ich hoffe so ist es ersichtlicher. Nun möchte ich z.b Zeile 3 ändern, aber leider habe ich die Formatierungen auch in die Zeile gespeichert, das heisst, wenn ich den Text ändere und die Formatierung nicht mehr hinein speichere, dann sieht die Formatierung aus.

In der zweiten angehängten Datei seht ihr dann wenn die Zeile geändert wurde wie das aussieht.

Danke und Gruss
 

Anhänge

  • Programm.JPG
    Programm.JPG
    14,5 KB · Aufrufe: 58
  • Programm2.JPG
    Programm2.JPG
    15 KB · Aufrufe: 53
Ich will in einer bestimmten Zeile den Text ändern und in der Zeile hat es noch eben andere Zeichen, die genau so bleiben sollen und auch nicht verschoben werden dürfen.
Und?! Wenn du schreibst dass du in irgendeiner Zeile den Text irgendwie ändern willst, dann ist die Antwort dementsprechend: änder sie doch irgendwie .

Darum muss z.b. die Zeile Buchstabe für Buchstabe auslesen, den Text neu eingeben und danach wieder mit dem richtigen Abstand speichern, damit mir das Gesamtbild der Zeile so bleibt.
Du solltest erstmal bei den Grundlagen anfangen. Was ist ein String? Könnte man evlt. die Zeichen eines Strings ändern? ;-]
Deswegen dachte ich, dass es die beste Lösung ist, wenn ich einzeln auslese und wieder einzeln speichere!?
Da solltest du evlt. nochmal drüber nachdenken.

Gruß
 
Du könntest anstatt der copy() -Methode zu verwenden replace() benutzen. Den geänderten Text dann über die Konsole in einen C-String oder String einlesen und anschließend dann mit der richtigen replace()-Methode ersetzen, allerdings müsstest du noch überprüfen, dass dein String, den du einfügst nicht zu lang ist und deine Formatierung überschreibt. Du kannst ja hier mal über replace nachlesen. Du solltest davor aber am Besten nochmal nachlesen wie ein String aufgebaut ist.
Viel Erfolg beim Programmieren ;-).

Gruß Phil
 
Zuletzt bearbeitet:
Vielen Dank touristguy, wenigstens du der nicht über meine Ausdruckweise diskutieren will...
Und in den String von der anderen Seite die Formatierung eingeben kann ich nicht, denn die Formatierung ist ja immer gleich?


Gruss
 
Zurück