Announcement

Collapse
No announcement yet.

schwierige Stringsuche

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

  • schwierige Stringsuche

    Hallo,

    ich habe ein problem mit der Stringsuche!
    in einer combobox steht zum beispiel "XT".
    jetzt soll in einer ini die entspreche nummer gesucht werden. die ini sieht zum beispiel so aus:

    <pre>
    Eintrag445=63.00 XTR;XTR
    Eintrag446=63.01 Airline;Airline
    Eintrag447=63.02 Saint;Saint
    Eintrag448=63.03 XT;XT
    </pre>

    wenn ich in der ini mit pos suche, findet er zuerst XTR und gibt mir die nummer 63.00 statt 63.03.
    Die Semikolons trennen deutsche und französische begriffe! gibt es hierfür überhaupt ne lösung?

    Gruß

    Markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus
    Hier sehe ich 3 Möglichkeiten
    1) du suchst anstelle 'XT' den String 'XT;'
    2) oder du speicherst die Daten anders in die Ini
    Eintrag445=63.00 \XTR\;\XTR\
    Eintrag446=63.01 \Airline\;\Airline\
    Eintrag447=63.02 \Saint\;\Saint\
    Eintrag448=63.03 \XT\;\XT\
    hier suchst du pos('\XT\',...)
    3) oder eine Eigene Pos-Function machen

    Frohes Schaffen
    Oswal

    Comment


    • #3
      Hi Markus,
      wie Oswald schon aufgeführt hat:
      Ich würde hinter das letzte XT noch ein Semikolon setzen, was ja auch richtig ist, wenn Du Einträge mit ";" anfügst!
      Laß eine Schleife über die Datei laufen, und setzte in jeder Zeile, wo ein"=" vorkommt ans Zeilenende ein ";". Dann klappt das mit der Suche.

      cu Michae

      Comment


      • #4
        hallo ihr beiden,

        ich glaube ich habe es hinbekommen.
        hier meine vorgehensweise:
        als erste lösche ich, je nach programmeinstellung die deutschen bzw. französischen begriffe!

        danach steckt in meiner stringliste das hier:

        63.00 XTR
        63.01 Airline
        63.02 Saint
        63.03 XT

        für den vergleich mit der combobox löesche ich die zahl (habe da eine eigene funktion), aber nicht in der stringliste sondern auf einer variable!
        danach mache ich einen direkten vergleich und wenn der passt, hole ich mir aus dem stringlistenelement die zahl!

        in code sieht das so aus:

        <pre>
        function TFormKatHaendler.HoleUntergrNrFumo : string;
        var
        FilterStr,verz,sText,HauptGrNr,SUntergrSuchwert : String;
        slUntergruppen : TStringlist;
        i : integer;
        ende : boolean;
        begin
        SUntergrSuchwert := '';
        ende := false;
        {$IFDEF Serverfarm}
        GloData.RuSession.GetAliasPath('Update', Verz);
        verz := DirectorySlash(Verz);
        {$ELSE}
        verz := DirectorySlash(Mandant_Daten);
        {$ENDIF}
        ListeAusIniLesen(verz+'AAAKatalog.ini','Untergrupp en Fuchs-Movesa',sText);
        //Hauptgruppe herausfinden, weil es die Untergruppe Alivio z. b. mehrfach gibt!!
        //Beispiel: 60.18 Alivio;Alivio, 62.18 Alivio;Alivio, 63.18 Alivio;Alivio
        HauptGrNr := HoleHauptgrNrFumo;
        slUntergruppen := TStringlist.Create;
        try
        slUntergruppen.Text := sText;
        //Deutsch oder französische Begriffe löschen
        SpracheFumoHauptgruppe(slUntergruppen,true);

        for i := 0 to slUntergruppen.Count-1 do
        begin
        //wurde nicht nach Hauptgruppe gesucht
        if HauptGrNr = '' then
        begin
        (*
        wegen solch untergruppen:
        Eintrag445=63.00 XTR;XTR
        Eintrag446=63.01 Airline;Airline
        Eintrag447=63.02 Saint;Saint
        Eintrag448=63.03 XT;XT
        Eintrag368=61.12 STX-RC;STX-RC
        Eintrag369=61.15 STX;STX

        Müssen die Begriffe XT bzw. XTR, STX-RC bzw. STX im direkten
        vergleich gesucht werden. eine Suche mit Pos schlägt fehl!
        *)
        SUntergrSuchwert := trim(STRElementDelete(slUntergruppen[i],' ',1));

        if (CbxUntergruppeFuchs.Text = SUntergrSuchwert) then
        //if pos(CbxUntergruppeFuchs.Text+';',slUntergruppen[i]) > 0 then
        begin
        Result := STRElement(slUntergruppen[i],' ',1);
        end;
        end else
        begin
        //wurde nach Hauptgruppe gesucht
        if HauptGrNr <> '' then
        begin
        (*
        wegen solch untergruppen:
        Eintrag445=63.00 XTR;XTR
        Eintrag446=63.01 Airline;Airline
        Eintrag447=63.02 Saint;Saint
        Eintrag448=63.03 XT;XT
        Eintrag368=61.12 STX-RC;STX-RC
        Eintrag369=61.15 STX;STX
        Müssen die Begriffe XT bzw. XTR, STX-RC bzw. STX im direkten
        vergleich gesucht werden. eine Suche mit Pos schlägt fehl!
        *)
        SUntergrSuchwert := trim(STRElementDelete(slUntergruppen[i],' ',1));
        //Hauptgruppe und Untergruppe vorhanden
        if (CbxUntergruppeFuchs.Text = SUntergrSuchwert)
        and (pos(HauptGrNr+'.',slUntergruppen[i]) > 0) then
        begin
        (*
        Weil der Kunde in einer Hauptgruppe, mehrere Untergruppen
        mit der selben Bezeichnung haben
        Beispiel:
        99.30 Display;Display de promotion
        99.35 Display;Display de promotion
        muss überprüft werden, ob die gefundene Untergruppe im Suchergebnis ist.
        *)
        with HaendlerData do
        begin
        Table1material.DisableControls;
        //Filter bearbeiten!!!!
        FilterStr := Table1material.Filter;
        FilterStr := LoescheAbLetztenString('and',FilterStr);
        Table1material.Filter := FilterStr;
        try
        Table1material.First;
        while not Table1material.Eof do
        begin
        if pos(copy(Table1material.fieldbyname('WGR').AsStrin g,1,5),slUntergruppen[i]) > 0 then
        begin
        Result := STRElement(slUntergruppen[i],' ',1);
        Table1material.First;
        ende := true;
        break;
        end;
        Table1material.Next;
        end;
        if ende then break;
        finally
        Table1material.EnableControls;
        end;
        end;
        end;//if HauptGrNr <> '' then
        end;
        end;
        end;
        finally
        slUntergruppen.Destroy;
        end;
        end;
        </pre>

        gruß

        Marku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          Ich verstehe zwar den Code nicht <p>
          aber Objekten werden mit Free nicht mit Destroy freigegeben.
          <p>
          Heik

          Comment


          • #6
            okay, danke
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment

            Working...
            X