suche nach einer zeichenkette in einer Datei



  • Hallo mal wieder,

    meine Frage betrifft diesmal das Suchen von Zeichenketten.

    Für meine Anwendung muss ich eine Zeichenkette in einer Datei finden und auslesen. Ebendso wäre ein laden der Datei in ein Memo oder RichEdit denkbar und das suchen darin nach der Zeichenkette. Das Problem ist das Suchen 😞

    1. Ich habe da nun aber zwei Probleme. Zum einen möchte ich nach einer mir bekanntne Zeichenkette suchen. Ich habe in der Hilfe schon was mit AnsiMatchText gefunden, werde daraus aber nicht schlau.
    2. Zum anderen möchte ich bspw. eine Zeichenkette der erste Zeile der Datei ab dem dritten Zeichen bis zum folgenden Leerzeichen auslesen.
    Das Zweite ist eigentlich schon kein suchen mehr, eher eine Art des Dateieinlesens.

    Danke im Voraus für eure Hilfe.

    MfG M



  • Hallo

    da der Thread so ähnlich ist :
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-107704.html

    /Edit : Link korrigiert

    bis bald
    akari



  • Hallo

    So, ich habe mir jetzt was überlegt um Zeichen aus einer StrinListe in versch. RichEdits zu kopieren. Die Zeichenkette END dient dabei als Index für das "Umschlaten" auf RichEdit2. Also alles was zw. StringListenPosition 28 und dem letzten END liegt soll in RichEdit1 und alles nach dem letzten END soll in RichEdit2 geladen werden.
    Leider zeigen die beiden verwendeten RichEdits nichts an.
    Wenn ich den Zähler ENDpos auslese erhalte ich eine 0 (siehe Befüllen RichEdit1), wenn i auslese erhalte ich im Label3 ebenfalls eine 0 (siehe Befüllen RichEdit2). Label1 zeigt die korrekte Länge der StringListe an...

    void __fastcall TFormMain::OpenReinforce(TStringList *tmpList)
    {
      int ListLenght=0, i=0, ENDpos=0;         
    
      ListLenght = tmpList->Count;                          //lenght of tmpList
      Label1->Caption = tmpList->Count;
    
      if (ListLenght >= 28) 
      {
        for (int i = 28; i == ListLenght ; i++ )  {           //search last END
            actString = tmpList->Strings[i];                  //get a String
            if (actString == "END") ENDpos = i;               //test to equal
            }
        Label2->Caption = ENDpos;
    
        for (int i = 28; i == ENDpos ; i++)                    
        RichEdit1->Lines->Add(tmpList->Strings[i]);                 //add Strings 
    
        for (int i = ENDpos+1; i == ListLenght ; i++ )    
        RichEdit2->Lines->Add(tmpList->Strings[i]);                 //add the rest 
        Label3->Caption = i;                           //müsste = ListLenght sein!
      }
    }
    

    Ich habe es schon mit anderen int Variablen als immer wieder i zu verwenden versucht, aber das bringt keine Abhilfe. Nach 2h über dme Problem hocken seh ich wohl auch den Wald vor lauter Bäumen nicht mehr... 😕

    Ich hoffe ihr könnt helfen.

    MfG M



  • Hallo

    Das hier

    for (int i = 28; i == ListLenght ; i++ )  {           //search last END
            actString = tmpList->Strings[i];                  //get a String
            if (actString == "END") ENDpos = i;               //test to equal
            }
    

    kannst du durch

    ENDPos = tmp->IndexOf("END");
    

    ersetzen.

    Desweiteren sind deine Bedingungen der Schleifen falsch. Diese sollen true sein, solange die Schleife fortgesetzt werden soll. Also

    for (int i = 28; i < ENDpos ; i++)                    
        RichEdit1->Lines->Add(tmpList->Strings[i]);                 //add Strings
    
        for (int i = ENDpos+1; i < ListLength ; i++ )    
        RichEdit2->Lines->Add(tmpList->Strings[i]);                 //add the rest
        Label3->Caption = i;
    

    /Edit : Die Variablen ListLenght, i und actString brauchst du nicht, das i in den Schleifen reicht aus.

    bis bald
    akari


Anmelden zum Antworten