[C/C++] Zeichen aus Textdatei löschen?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Characticl D, 13. Januar 2010 .

  1. 13. Januar 2010
    Zeichen aus Textdatei löschen?

    Hallo RR'ler,

    ich schreibe hier gerade eine Konsolenanwendung.
    Dazu brauche ich eine Möglichkeit, wie man in einer Textdatei alle Hochkommata (") löscht.
    Gibt es da eine brauchbare Funktion?

    Kann mir jemand helfen?

    Danke schonmal, BW ist natürlich Ehrensache.
     
  2. 13. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    - datei in nen string einlesen
    - ganz normal alle ' ersetzen
    - string wieder in datei schreiben
     
  3. 13. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    erweitere dein wissen um "regular expressions" oder "reguläre ausdrücke" ist sehr effektiv
     
  4. 13. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    Bisher wurden schon alle nötigen Informationen dazu geschrieben wie man Zeichen komplett löscht, allerdings kannst du sie auch einfach mit etwas überschreiben, indem du die Datei mit (in C) dem "r+"-Modus öffnest, den Dateizeiger an die gewünschte Position setzt und dann ein Zeichen in die Datei schreibst.

    Keine Ahnung wie das in C++ ginge..
    Eventuell ios_base: ut|ios_base::trunc, teste das aber lieber voher an einer unwichtigen Datei.
     
  5. 14. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    Habe nun jede Zeile der Datei in einen Vector vom Typ String eingelesen, sprich ich kann jetzt durch vector[1] z.B. auf die zweite Zeile der Textdatei zugreifen.

    Wie kann ich nun in jedem String alle " entfernen?
    Habe schon Funktionen wie replace etc. ausprobiert, aber entweder es geht nicht oder mein Programm stürzt ab...
     
  6. 14. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    Hier ein "Minicode" um die " - Zeichen zu entfernen:

    Code:
     char str[] = "Dies\" ist\" eine\" Textzeile\" in\" dem\" die\" Anführungszeichen entfernt werden.";
     
     int a = 0, b = 0;
     while (str[a] != 0) if (str[a++] != *"\"") str[b++] = str[a-1];
     str[b] = 0;
    
    Für Strings hab ich grad kein Code parat, du könntest aber einen String rückwärts durchgehen und die Zeichen mit erase löschen.

    Mfg Rushh0ur
     
  7. 14. Januar 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Zeichen aus Textdatei löschen?

    Ich habe es jetzt schon so weit:

    Code:
    List::deleteCommas()
    { 
     // vorher.txt in Vector einlesen
     while( getline( vorher, line ) )
     linesVorher.push_back( line );
    
     // Durch Überprüfung JEDES Zeichens die Hochkommata löschen
     for(unsigned int i = 0; i <= linesVorher.size(); i++)
     {
     
     for(unsigned int j = 0; j <= linesVorher[i].size(); j++)
     {
     if(linesVorher[i][j] == '\"')
     {
     linesVorher[i].erase(j, 1);
     }
     else
     {
     
     }
     }
     }
     
     cout << linesVorher[1];
    
     return 0;
    
    }
    vorher ist meine in der Klasse definierte Datei.
    line der Zeilenstring.
    linesVorher ist der Stringvector.

    Wenn ich das so ausführe kommt eine Fehlermeldung in der Konsole:
    Download: ssss.jpg | xup.in

    Ich bin noch nicht so bewandert, deswegen sind meine Versuche vielleicht noch etwas komisch :/
     
  8. 14. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    Es müsste es funktionieren:

    Code:
     // Durch Überprüfung JEDES Zeichens die Hochkommata löschen
     [COLOR="SeaGreen"]// Nicht Gleich da ja die Null mit gezählt wird[/COLOR]
     for(unsigned int i = 0; i [B]<[/B] linesVorher.size(); i++)
     {
     [COLOR="SeaGreen"]// Rückwärts gehen, da beim vorwärts gehen und löschen zeichen übersprungen werden[/COLOR]
     for(unsigned int j = linesVorher[i].size() - 1; j>=0; j--) 
     {
     [COLOR="SeaGreen"]// Ich muss ich bei meinem Compiler nen * davor setzen[/COLOR]
     if(linesVorher[i][j] == [B]*[/B]'\"') 
     {
     linesVorher[i].erase(j, 1);
     }
     else
     {
     
     }
     }
     }
    
    Mfg Rushh0ur
     
  9. 14. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    1. warum \" ? => ' " ' (leerzeichen zur verdeutlichung)
    2. leeres else stament kann weg, dir hat wohl irgend ein trottel erzählt "kein if ohne else"
    3. ++i is schneller als i++

    Code:
    // Durch Überprüfung JEDES Zeichens die Hochkommata löschen
    // Nicht Gleich da ja die Null mit gezählt wird
    for(unsigned int i = 0; i < linesVorher.size(); ++i)
     // Rückwärts gehen, da beim vorwärts gehen und löschen zeichen übersprungen werden
     for(unsigned int j = linesVorher[i].size() - 1; j>=0; --j) 
     // Ich muss ich bei meinem Compiler nen * davor setzen - ich net
     if(linesVorher[i][j] == '"') 
     linesVorher[i].erase(j, 1);
    ne schöne treppe gebaut
     
  10. 15. Januar 2010
    AW: Zeichen aus Textdatei löschen?

    Danke für die Hilfe, funktioniert jetzt.
    Was auch ein Problem war: Mein VS meckert, wenn ich in einer Schleifer statt unsigned ein normalen Integer nehme, warum auch immer.

    Aber daran lag es, dass er bei mir immer abgebrochen hat.

    Und @Murdoc:
    Ja das hat mir wirklich jemand gesagt, kein if ohne else

    BWs sind, soweit möglich - raus.
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.