Hilfestellung zu Dateieingabe -ausgabe benötigt



  • Hallo,

    ich möchte ein Programm schreiben welches den Inhalt aus zwei Textdateien ausliest (diese beinhalten nur Einsen und Nullen), diese indexäquivalent miteinander vergleicht (erstes Zeichen aus erster Textdatei mit erstem Zeichen aus zweiter Textdatei usw.; Anzahl der Zeichen ist identisch.) und im Falle das zwei Zeichen eins sind, beide auf Null setzt. Wie stelle ich das am besten an??? Ich probiere jetzt schon den ganzen Tag mit fopen, fread und fwrite zum Ziel zu gelangen, es will mir jedoch nicht richtig gelingen. Prinzipiell sollte es doch am effektivsten sein, wenn man immer jeweils ein Zeichen aus beiden Textdateien ausliest, vergleicht und wenn beide 1 sind den Lesekopf um eins verringert um dann die Einsen mit Nullen zu überschreiben, oder???

    Über Hilfe würde ich mich sehr freuen und bedanke mich schonmal im Vorraus dafür.

    MfG,
    SubZer0



  • Den Inhalt der beiden Dateien in zwei Puffer schreiben. Vergleichen, ändern und wieder in Datei schreiben. 🙂



  • haase schrieb:

    Den Inhalt der beiden Dateien in zwei Puffer schreiben. Vergleichen, ändern und wieder in Datei schreiben. 🙂

    Ja, genau so. In Code ausgedrückt:

    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <string>
    
    std::string dateiInhalt( const char* fileName )
    {
        std::ifstream f( fileName );
        return std::string( std::istream_iterator< char >( f ), std::istream_iterator< char >() );
    }
    
    int main()
    {
        using namespace std;
        const string s1 = dateiInhalt( "file1.txt" );
        const string s2 = dateiInhalt( "file2.txt" );
    
        ofstream f1( "file1.txt" );
        ofstream f2( "file2.txt" );
        for( string::const_iterator i1 = s1.begin(), i2 = s2.begin()
            ; i1 != s1.end() && i2 != s2.end(); ++i1, ++i2 )
        {
            if( *i1 == '1' && *i2 == '1' )
            {
                f1 << '0';
                f2 << '0';
            }
            else
            {
                f1 << *i1;
                f2 << *i2;
            }
        }
        return 0;
    }
    

    Gruß
    Werner



  • Möchte Dich auch noch auf die Technik hinweisen, mit zwei Dateizeigern pro Datei zu arbeiten.

    #include <fstream>
    using namespace std;
    
    int main() {
       char c1, c2;
       fstream ein1("file1.txt");
       fstream ein2("file2.txt");
       fstream aus1("file1.txt");
       fstream aus2("file2.txt");
    
       while (true) {
          ein1 >> c1;
          ein2 >> c2;
          if (!ein1.good()) break;
          if (c1 == '1' && c2 == '1') {
             c1 = '0';
             c2 = '0';
          }
          aus1 << c1;
          aus2 << c2;
       }
       return 0;
    }
    

    mfg


Anmelden zum Antworten