String in txt suchen und löschen



  • hi, ich bin gerade dabei im header eine funktion zu definieren mit der ich einen string in einer festgelegten textdatei suchen kann und falls dieser vorhanden ist anschließend zu löschen.
    mein bisscheriger ansatz ist:

    bool TGutscheine::Einloesen (string GutCode, string dateiname)
    {
            ifstream Dat_ein;
            ofstream Dat_aus;
            int echt[100], rueck=0;
            Dat_ein.open(dateiname.c_str(), ios_base::in);
            if(!Dat_ein)
            {
                    rueck= 1;
            }else
            {
                    Pos=0;
                    while (!Dat_ein.eof())
                    {
                            Dat_ein >>Code[Pos];
                            if(GutCode==Code[Pos])
                            {
                                    echt[Pos]=0;
                                    rueck=1;
                            }
                            Pos++;
                    }
                    Dat_ein.close();
                    Dat_aus.open(dateiname.c_str(), ios_base::out);
                    if(!Dat_aus)
                    {
                            rueck= 0;
                    }else
                    {
                            for(int x=0; x<Pos;x++)
                            {
                                    if (echt[x]==1)
                                    {
                                            Dat_aus << Code[x]<<endl;
                                    }
                            }
                            Dat_aus.close();
                            rueck=1;
                    }
            }
            return rueck;
            }
    

    kann man dieses problem auch einfacher lösen da diese definition momentan nciht funktioniert



  • das problem ist, dass wenn der string in der textdatei gefunden wird, der ganze inhalt der txt gelöscht wird ich aber nur eine zeile löschen will



  • wie groß ist die Datei?

    Wenn es eine reine Textdatei mit CR/LF und die Anzahl an Zeilen überschaubar ist, könntest du die Datei in eine Stringliste einlesen, den entsprechenden String suchen und entfernen und dann die Stringliste wieder zurückspeichern.

    Beispiel:

    TStringList *StrList = new TStringList;
    StrList->LoadFromFile("C:\\Datei.TXT");
    
    // String suchen
    for(int i=0;i < StrList->Count;i++)
    {
      if(StrList->Strings[i] == [dein Vergleichsstring] )
      {
        StrList->Delete(i)   
        break;
      }
    }
    
    StrList->SaveToFile("C:\\Datei.TXT");
    delete StrList;
    

    Es gibt sicher auch noch intelligentere Lösungen!



  • Man könnte mit .Pos("gesuchter String") prüfen ob der Teilstring in einer Zeile überhaupt vorhanden ist anstatt die ganze Zeile mit dem Searchstring zu Vergleichen. Das schöne ist das Pos den Index zurück gibt wo der gesuchte Teilstring beginnt und die Länge kann man vom Searchstring ableiten. Schon hat man alle Parameter zum herausfiletieren


Anmelden zum Antworten