Stringblöcke entfernen



  • Hallo ,
    Ich habe eine Datei und drin gibt es folgende Text.

    ABCD.....11
    KLMM.....98
    FFDS.....77
    FFDS.....10
    FFDS.....12
    FFDS.....18
    KBED.....27
    FFTS.....14

    ABCD.....12
    KLMM.....28
    KBED.....97
    FFTS.....84

    ABCD.....12
    KLMM.....28
    FFDS.....79
    FFDS.....16
    FFDS.....73
    FFDS.....13
    FFDS.....71
    FFDS.....12
    FFDS.....74
    BCKK.....15
    KBED.....97
    FFTS.....84

    ABCD.....12
    KLMM.....28

    Jede ID z.B. ABCD gibt eine information. und eine informations block fängt mit ABCD an und beendet mit FFTS. Wie man oben sieht
    , habe ich insgesamt 3 blöcke und die 4. block ist nocht nicht beendet(weil es am ende kein FFTS gibt).
    Normalerweise sind die informations blöcke nicht mit lücken getrennt . Die sehen wie unten aus. Ich habe die blöcke oben getrennt, damit man die Blöcke
    übersichtlicher sehen kann.Aber die orginale datei sieht wie unten aus.

    ABCD.....11
    KLMM.....98
    FFDS.....77
    FFDS.....10
    FFDS.....12
    FFDS.....18
    KBED.....27
    FFTS.....14
    ABCD.....12
    KLMM.....28
    KBED.....97
    FFTS.....84
    ABCD.....12
    KLMM.....28
    FFDS.....79
    FFDS.....16
    FFDS.....73
    FFDS.....13
    FFDS.....71
    FFDS.....12
    FFDS.....74
    FFDS.....15
    KBED.....97
    FFTS.....84
    ABCD.....12
    KLMM.....28

    Meine Frage ist , ich möchte die ganze blöcke (zwischen ABCD und FFTS ) löschen und die offene blöcke in der datei lassen.Also d.h ich möchte
    in meiner Datei am ende nur
    ABCD.....12
    KLMM.....28

    sehen.

    So wie unten habe ich angefangen aber ich weiß nicht wie ich weiter machen soll.

    void CTestView::OnTestLoeschen()
    {
    
    	//--------------------------------------------------------------+
    	// 	CStdioFile objekt erstellen				!
    	//--------------------------------------------------------------+
    	CStdioFile File;
    	CString	sZeile = "";
    	CStringList zeileSet;
    	//--------------------------------------------------------------+
    	// 	Mit dem gegebenen Path (sPath) Datei öffnen		!
    	//--------------------------------------------------------------+
    	File.Open(sPath, CFile::modeRead);
    
    	//--------------------------------------------------------------+
    	// 	File name und die größe des Files			!
    	//--------------------------------------------------------------+
    	File.GetFileName();
    
    	CString id;
    	CString inf;
    
    	while(File.ReadString(sZeile))//
    	{
    		zeileSet.AddTail(sZeile);
    		id=zeileSet.GetTail();
    		inf=zeileSet.GetTail();
    		id=id.Mid(0,4);
    
    		if(id=="ABCD")
    		{	
    			?????
    		}
    	}
    }
    

    Kann mir bitte jemand helfen.
    Danke im Voraus für die unterstützung



  • kann mir keiner Helfen


  • Mod

    Wo willst Du denn die Daten haben? In einem neuen Array einer neuen Datei?

    Versuch es doch mal ganz einfach algorithmisch mit etwas Einsatz von Gehrinschmalz zu lösen. 😉

    1. Überspringe alle Zeilen bis Du ABCD findest.
    2. Lies alle nächsten Zeilen und speichere jede dieser Zeilen in einem Vector/Liste
    3. Wird FFTS erreicht löscht Du Deinen Vector/LIste mit den gespeicherten Zwischendaten und beginnst bei 1.
    4. Wird EOF erreicht enthält der Vector/Liste Dein Ergbenis, den letzten unvollständigen Datenblock. Der auch leer sein kann.



  • Hallo ,
    Vielen Dank für deine Antwort.
    Ich will die Daten in einer neuen Datei haben .
    Ich habe wie unten probiert aber ich glaub ich mach fehler, es klappt nicht...

    Wie kann ich alle zeilen speichern wenn ich ABCD gefunden habe? oder wie kann ich alles löschen und denn rest wieder speichern wenn ich FFTS finde?

    Kannst du mal bitte schauen was ich unten noch verbessern soll???

    void CTestView::OnTestLoeschen() 
    { 
    
        //--------------------------------------------------------------+ 
        //     CStdioFile objekt erstellen              		    ! 
        //--------------------------------------------------------------+ 
    
        CStdioFile File; 
        CString    sZeile = ""; 
        CStringList zeileSet; 
    
        //--------------------------------------------------------------+ 
        //     Mit dem gegebenen Path (sPath) Datei öffnen        	    ! 
        //--------------------------------------------------------------+ 
    
        File.Open(sPath, CFile::modeRead); 
    
        //--------------------------------------------------------------+ 
        //     File name und die größe des Files            	    ! 
        //--------------------------------------------------------------+ 
    
        File.GetFileName(); 
    
        CString id; 
        CString inf; 
    
        while(File.ReadString(sZeile))// 
        { 
            zeileSet.AddTail(sZeile); 
    
            id=zeileSet.GetTail(); 
            inf=zeileSet.GetTail(); 
            id=id.Mid(0,4); 
        //--------------------------------------------------------------+ 
        //    Ist das Richtig so oder mach ich fehler???           	    ! 
        //--------------------------------------------------------------+
            if(id=="ABCD")  //??????????   
                m_Vector.push_back(sZeile);//???????????
    	    if(id=="FFTS")//???????
    	        m_Vector.clear();//????????
    
        } 
    }
    


  • noch nicht angeschaut ???



  • Hallo Martin ,
    könntest du mir bitte Helfen? Ich weiß wirklich nicht wie ich weiter machen soll???


  • Mod

    zaga49 schrieb:

    Hallo Martin ,
    könntest du mir bitte Helfen? Ich weiß wirklich nicht wie ich weiter machen soll???

    Ich habe Dir geholfen soweit ich das "wollte".
    Ich gebe gerne Tipps, aber ich mache nicht die Arbeit für andere. Sorry!
    Der Algorithmus ist doch klar... 😉



  • Ja , ich danke dir aber ich weiß wirklich nicht wie ich ab

    if(id=="ABCD")  //??????????   
                m_Vector.push_back(sZeile);//???????????
            if(id=="FFTS")//???????
                m_Vector.clear();//????????
    

    hier weiter machen soll. ich weiß wirklich nicht wie ich ab if(id=="ABCD") alles speichern soll.

    wenn du mir da was kleines sagen könntest , würd ich mich wirklich freuen



  • Hallo Martin,
    ich möchte bloß wissen wenn ich "ABCD" gesehen habe , wie ich mich reagieren soll im Code. weil wenn ich sag

    if(id=="ABCD")
    m_Vector.push_back(sZeile);
    

    tut mein code nur ABCD.....11 speichern aber ich will die untere zeilen auch speichern. Könntest du mir da vielleicht ein tipp geben.

    ICh danke dir



  • Du willst doch in eine Datei schreiben?!
    Warum hantierst du dann mit Vektoren rum?

    while( File.ReadString(sZeile) )
    if(id=="ABCD"||id=="FFTS")
    OutputFile.WriteString(sZeile);


  • Mod

    Wutz schrieb:

    Du willst doch in eine Datei schreiben?!
    Warum hantierst du dann mit Vektoren rum?

    while( File.ReadString(sZeile) )
    if(id=="ABCD"||id=="FFTS")
    OutputFile.WriteString(sZeile);

    Weil noch nicht weiß, dass dieser Teil einer ist der nicht abgeschlossen ist. Wwarum soll er es in eine Datei schreiben, wenn er es hinterher wiederverwirft.


Anmelden zum Antworten