Announcement

Collapse
No announcement yet.

AnsiString auf bestimmte Zeichen durchsuchen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AnsiString auf bestimmte Zeichen durchsuchen

    Hallo alle zusammen.

    Bin zur Zeit daran ein Programm zu schreiben das Verzeichnise und Dateien einliest und in ein MemoFeld einträgt.
    Die Dateiendungen sollen nicht angezeigt werden, dazu muss die String Variable die den Namen enthält auf einen Punkt durchsucht werden und alles was hinter dem Punkt ist gelöscht werden.

    Wie durchsuche ich einen AnsiString?

    Danke im vorraus.
    Michael

  • #2
    Schau Dir mal die Methoden des AnsiString an, da sind dann noch mehr Funktionen zur Manipulation von Strings aufgeführt. <br>

    Die Methode Pos gibt den Index der Position zurück, an dem der angegebene Teilstring beginnt.

    int __fastcall Pos(const AnsiString& subStr) const;

    Anwendung:
    <pre>
    String sDatei;
    // ...Zuweisung etc. ... //
    int nPos = sDatei.Pos(".");
    sDatei.SetLength(nPos);// kürzt den String auf die entsprechende Länge
    </pre>

    Gruß Thorste

    Comment


    • #3
      Hallo Thorsten<br>
      mit "normalen" Variablen kein Problem aber mit TStringList ?<br>
      Scau es dir bitte mal an.<br><br>

      TStringList *sl = new TStringList;<br>

      for(int i=0; i<sl->Count; i++)<br>
      //einlesen geht<br>
      Memo1->Lines->Add(sl->Strings[i]);
      //das..<br>
      //Memo1->Lines->Add(sl->Strings[i].SubString(1, sl->Text.Pos(".") -1));<br>
      //als auch das geht nicht<br>
      //Memo1->Lines->Add( sl->Strings[i].SetLength(sl->Text.Pos(".")));<b

      Comment


      • #4
        Ich dachte das so:

        <pre>
        TStringList *sl = new TStringList();

        sl->Add("File1.ext");
        sl->Add("File2.ext");

        for(int i = 0; i < sl->Count; i++){
        String s;
        s = sl->Strings[i].SetLength((sl->Strings[i].Pos(".")-1));
        Memo1->Lines->Add(s);
        }
        delete sl;
        </pre>

        Geht natürlich auch alles in einer Zeile

        Comment


        • #5
          Funktioniert super!<br>
          Nur falls Dateien ohne Endung in das Memo eingelesen werden (Ordner), verschwinden die auch mit.<br>
          Aber damit kann ich leben.<br>
          Viiiiiiiiiiilen Dank <br>
          Gruß Michael<br&gt

          Comment


          • #6
            Dann benutze SetLength nur dann wenn das Ergebnis von Pos > 0 ist

            Comment


            • #7
              Hast du ein Beispiel?<br>
              Nur wenn es kein Umstand ist.<br&gt

              Comment


              • #8
                ganz einfach:

                <pre>

                for(int i = 0; i < sl->Count; i++){
                String s = sl->Strings[i];
                int n = sl->Strings[i].Pos(".");
                if(n > 0) s = sl->Strings[i].SetLength((n-1));
                Memo1->Lines->Add(s);
                }

                </pre&gt

                Comment


                • #9
                  Nochmals Danke!<br>
                  Klappt alles wunderbar.<br>
                  Wünsche dir noch ne schöne Woche.

                  Michae

                  Comment

                  Working...
                  X