Seltsame Begebenheit beim auslesen aus Datei



  • Heho hier der code:

    #include <iostream>
    #include <fstream>
    #include <cctype>
    using namespace std;
    
    ofstream writen;
    ifstream readn;
    
    long Asearch(char* target,short length, ifstream& readn, char* filename) //length is target length without '\0'
    {
         bool FOUND = false;
         short i = 0;
         long n = 0,temp;
         readn.open(filename,ios::in);
         if(!readn.good())
         return -2;
    
         while(!readn.eof())
         {
    
                           temp = readn.tellg();
    
                            while(readn.peek() == target[i])
                            {
                                               if(i == length - 1)
                                               {
                                                    FOUND = true;
                                                    break;
                                                    }
    
                            i++;    
                            }
    
         i = 0;
         if(FOUND == true)
         break;
         }
    
         if(FOUND == false)
         return -1;
    
         n = readn.tellg();
         n = n - (length);
         readn.close();
         return n;
    }
    
    int main()
    { 
      writen.open("test.txt",ios::out);
      writen << "aaaaaaaaaaaae" << endl;
      writen.close();
      printf("%d lol",Asearch("e",1,readn,"test.txt"));
      getchar();
      return 0;
    }
    

    Geht mir um die FUnktion oben, die eine Zeichenkette in einer Textdatei finden kann(ich weiß noch nicht optimal).
    nun folgendes:

    Lass ich das "temp = readn.tellg();" weg, scheint "readn.peek()" nicht zu funktionieren, was sich dadurch zeigt, dass die position vom getpointer nicht erhöht wird, also EOF nie erreicht wird.
    Sobald ich den "temp" teil wieder einfüge, funktioniert das programm/die funktion wieder.
    Scheinbar initialisiert tellg irgendwas, oder es gibt ne andere beschaffenheit von peek die ich nicht kenne
    hat wer ne ahnung wie das kommt? oo
    danke für alle antworten



  • willst du C oder C++ programmieren?



  • c++ 😛 auch wenn diverse dinge von C noch drin sind ^^
    inwiefern ist das relevant für die frage?


  • Administrator

    peek soll auch den getpointer nicht erhöhen:
    http://www.cplusplus.com/reference/iostream/istream/peek.html

    Was du suchst ist wohl get :
    http://www.cplusplus.com/reference/iostream/istream/get.html

    Grüssli



  • ok danke, aber das würde ja bedeuten dass tellg() den counter erhöht OO
    ich mein damit hats funktioniert oO



  • dazu steht in der referenz zwar nichts, aber irgendwie habe ich das gefühl das "tellg()" die position um eins erhöht nachdem die aktuelle position wiedergegeben worden ist. Kann das sein? habe wenn ich das benutze immer seltsame positionserhöhungen


Anmelden zum Antworten