Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Aus einer txt-Datei lesen und Zeile ersetzen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.04.2009, 15:23 Uhr
~kenux
Gast


Hallo,
ich möchte ein C++ Programm schreiben; das Programm soll aus EINER Textdatei (text.txt) eine bestimmte Zeile auslesen und diese Zeile durch einen vorgegeben Text ersetzen.

Beispiel Inhalt text.txt:

mofa
rennrad
motorrad

jetzt soll nun rennrad durch auto ersetzt werden

die Textdatei text.txt sollte dann so aussehen:

mofa
auto
motorrad

hättet ihr eine Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.04.2009, 16:29 Uhr
0xdeadbeef
Gott
(Operator)


Warum C++? Ich würd dafür sed benutzen:

Shell:

$ sed 's/^rennrad$/auto/' text.txt > text_neu.txt



Wie dem aber auch sei, auf einer Datei zu arbeiten, ist aus Gründen der Datensicherheit selten eine gute Idee. Wenn dein Programm zwischendurch abstürzt/abgeschossen wird/der Rechner abschmiert, verlierst du auf die Art leicht Daten. Also:

C++:
#include <fstream>
#include <string>

int main() {
  std::ifstream in("eingabe.txt");
  std::ofstream out("ausgabe.txt");
  std::string line;

  while(std::getline(in, line)) {
    if(line == "rennrad") {
      out << "auto\n";
    } else {
      out << line << '\n';
    }
  }
}


...und schieb die kompletten Dateien danach halt in der Gegend rum, wenn du die Ursprungsdaten unbedingt weghaben willst (obwohl mir nicht ganz klar ist, warum du das wollen solltest). Auf die Art hast du zumindest immer einen brauchbaren Zustand.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2009, 16:35 Uhr
~kenux
Gast


Vielen Dank 0xdeadbeef,

dein C++ hat mir sehr geholfen, jetzt weiß ich wie sowas funktioniert.

Ich habe noch 2 Fragen, wenn du gestattest

Ist es denn auch möglich nur eine Datei zu benutzen, also nur von einer Datei lesen und den geänderten Text wieder in die gleiche Datei schreiben??

Und kann man deinen C++ Code so ändern, dass man auch direkt Zeilen ansprechen kann, z.b. Zeile 2 ändern zu auto??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.04.2009, 16:48 Uhr
0xdeadbeef
Gott
(Operator)


Du kannst zwar random access auf einer Datei beschreiben, aber ich habe dir oben beschrieben, warum du das nicht willst (Zumindest nicht, sofern die Datei nicht sehr groß und/oder in Blöcken organisiert ist). Es ist unsicher. Außerdem ist es ein unheiliges Hin und Her zwischen seekp und seekg, bei dem es leicht ist, Fehler zu machen, sofern sich die Positionen nicht trivial bestimmen lassen (daher die Blockorganisationsausnahme).

Zeilenweise lässt sich die Datei nicht ansprechen, denn sie ist ein Strom von Zeichen, und "rennrad" beinhaltet nicht die gleiche Anzahl Zeichen wie "auto".
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: