Rückwärts suchen als Befehl....??



  • Hallo, zusammen
    suche in einem AnsiString eine bestimmte Stelle, erhalte dann den Index (i2)
    zurück und möchte nun ab dieser Stelle rückwärts ein vorhergehendes Zeichen suchen:
    Konkret finde ich in Int i2 die Position von "|"+z1+"|" und davor suche ich nun
    mit z3.LastDelimiter("°") das Zeichen für den Datenanfang, die mich interessieren.
    Mir kommt meine Methode irgendwie mit dem Zerteilen in Einzelstring ziemlich
    blöde vor. 🙂 Gibt es keinen Befehl, der in einem String ab Pos x rückwärts
    suchen kann? (in anderen Sprachen kenne ich das als Instr() (hier AnsiPos) und
    eben für Rückwärts als RInstr().... ???

    z2=zSchrank.SubString(i2,zSchrank.Length()-i2);                               // und String nur ab diesem Schrank kürzen
      i2=z2.AnsiPos("°°°");                                                         // und suchen Schrankende
      z2=z2.SubString(1,i2);                                                        // und String nur ab diesem Schrank kürzen
      //ShowMessage("Schrank: "+z2+"\r\rSuche: "+z1);                               // Schrankdaten komplett
    
      z1=frm13_grdPatch->Cells[2][i1];                                              // Panelname auslesen
      i2=z2.AnsiPos("|"+z1+"|");                                                    // Panelbezeichnung suchen
      o2=i2>0;                                                                      // Panel vorhanden
      z3=z2.SubString(1,i2);                                                        // und String ab da kürzen
      i2=z3.LastDelimiter("°");                                                     // ab wo stehen für dieses Panel die Daten?
      z3=z2.SubString(i2,z2.Length()-i2);                                           // reine Paneldaten abschneiden
    
      z4   =DatenPipe(1,4,z3,"!!"); i2=z4.AnsiPos("_");                             // z.B. Ports_24 ausschneiden
      z4   =z4.SubString(i2+1,z4.Length());                                         // Anzahl als String ermitteln
      iPort=StrToIntDef(z4,0);                                                      // und als Int ermitteln
      //ShowMessage("Schrank: "+z2+"\r\rPanel: "+z3+"\r\rPorts: "+z4);                // Panel- und Portdaten
    
      z1=frm13_grdPatch->Cells[3][i1];                                              // Portanzahl auslesen
      i2=StrToIntDef(z1,0);                                                         // und als Int ermitteln
      o3=i2<=iPort && i2>0;                                                         // prüfen
    

    Danke und Gruss, Stefan



  • Ist das rückwärtssuchen nötig??

    Vielleicht hilft schon aufteilen:

    http://www.marquardtnet.info/cecke/quickies.1/1_quicky_01.html

    oder suchen und ersetzen

    http://www.marquardtnet.info/cecke/quickies.1/1_quicky_02.html

    Und dann ggf. in eine Teilstring arbeiten



  • ungefähr soetwas?

    int Rinstr(AnsiString asText,char cZeichen, int iPos)
    {
        int i;
        for(i = iPos; i>0; i--)
        {
            if(asText[i] == cZeichen)
                break;    
        }
        return i;
    }
    

Anmelden zum Antworten