Kleines Problem von einlesen von Dateien



  • Hallo

    habe nen kleines Prob mit dem einlesen von einer Datei und zwar möchte ich dei Datei zeilenweise auslesen. Ein Datensatz kannman anhand der nummer rausfinden und die nachfolgenden zeilen sind dann die drei Attribute.

    So sieht mein Code bisher aus:

    treffer = 0;
    
    CStdioFile  datei( "daten.dat", CFile::modeRead );
    
    	while(datei.ReadString(zeile)){
    
    		if(zeile == "1*"){
    			treffer = 1;
    			nummer = zeile;
    			//break;
    		}
    		if(treffer = 1){
    			treffer = 2;
    			beschreibung = zeile;
    			//break;
    		}
    
    		if(treffer = 2){
    			treffer = 3;
    			preis = zeile;
    			//break;
    		}
    		if(treffer = 3){
    		m_artikelanzeige.AddString(nummer +"   "+beschreibung+"   "+preis);
    
    		}
    
    	}
    

    Problem ist jetzt das ich aus der while schleife net raus komme also das erst eine weitere zeile eingelesen werden muss befor es weiter geht sonst bekomme ich immer das gleiche angezeigt.
    Mit break; komme ich net raus da geht gar nix mehr:(

    MFG

    Jens



  • Erstmal solltest du in den if-Abfragen ein "==" verwenden und als nächstes eventuell ein else davor (sonst wirst du von einem if() direkt zum nächsten weitergereicht und erhältst in allen Feldern deines Datensatzes den selben Wert ("1*").

    Und außerdem ist mir nicht klar, was die erste if()-Abfrage vergleichen soll: Werden deine Datensätze wirklich je von den Zeichen "1*\n" eingeleitet?



  • 1*
    Beschreibung
    Preis

    so sieht meine datei!

    Also quasi sobald 1* kommt gehört die anderen beiden auch noch zusammen so das ich
    die unterscheiden kann. Es geht einfach nur darum mehrere Datensätzt zusammenzufügen so das man sie identifizieren kann.

    drei Zeilen sind immer ein Datenstz und die nächsten dann wieder also die fangen dann mit 2* an und die nächsten beiden zeilen gehören dann wieder zu 2*



  • versuch's mal etwa so:

    while(datei.ReadString(zeile))
    {
      switch(treffer)
      {
      case 0:
        if(zeile[zeile.GetLength()]=='*')        //Zeile endet mit "*"
        {
          nummer=zeile.Left(zeile.GetLength-1)); //das "*" am Ende abgeschnitten
          treffer=1;                             //nächste Zeile erwartet Beschreibung
          break;
        }
      case 1:
        beschreibung=zeile;
        treffer=2;                               //nächste Zeile erwartet Preis
        break;
      case 2:
        preis=zeile;
        m_anzeige.AddString(nummer+":"+Beschreibung+"="+Preis);
        //eventuelle Weiterverarbeitung der Daten
        treffer=0;                               //nächste Zeile sucht nach neuem Datensatz
        break;
      }
    }
    

Anmelden zum Antworten