Announcement

Collapse
No announcement yet.

Strings einer TListbox in mehrere TEditfelder splitten

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

  • Strings einer TListbox in mehrere TEditfelder splitten

    hallo, habe folgendes problem: in meiner TListbox ist text in folgendem Schema dargestellt. Text1|Text2||Text3|Text4|Text6|Text7|Text8|Text9|x ||||. Wie kann ich diese Strings in mehreren TEditfeldern splitten? Mit folgendem Script komme ich nicht weiter: <font size=2 face="Courier New"><font color="#000000">FlatEdit1.Text&nbsp;:=&nbsp;Copy(L istBox1.Items[i],&nbsp;Pos('',&nbsp;ListBox1.Items[i])&nbsp;+1,&nbsp;Pos('|',&nbsp;ListBox1.Items[i])&nbsp;-&nbsp;Pos('',&nbsp;ListBox1.Items[i])&nbsp;-1);
    FlatEdit2.Text&nbsp;:=&nbsp;Copy(ListBox1.Items[i],&nbsp;Pos('|',&nbsp;ListBox1.Items[i])&nbsp;+&nbsp;1,&nbsp;Pos('||',&nbsp;ListBox1.Item s[i])&nbsp;-&nbsp;Pos('|',&nbsp;ListBox1.Items[i])&nbsp;-1); usw.

    </font></font> Es soll nur der Text 1 in TEditfeld1 und Text 2 in TEditfeld2 usw. dargestellt werden nicht diese Zeichen |x grüße..

  • #2
    Hallo,

    der folgende Code demonstriert das Verfahren des Splittens. Statt einer 2. Listbox nimmst du z.B. eine Stringlist und verteilst dann die Einträge auf die Edit-Felder.
    <pre>
    procedure TForm1.Button1Click(Sender: TObject);
    var s : string;
    p : integer;
    begin
    s := listbox1.items[0];
    p := pos('|',s);
    while p > 0 do
    begin
    if p = 1 then
    begin
    listbox2.items.add('');
    delete(s,1,1);
    end else
    begin
    listbox2.items.add(copy(s,1,p-1));
    delete(s,1,p);
    end;
    end;
    end;
    </pre>

    Gruß Ul

    Comment


    • #3
      <pre>
      procedure TForm1.Button1Click(Sender: TObject);
      var s : string;
      begin
      s := listbox1.items[0];
      while pos('|',s) > 0 do
      begin
      if pos('|',s) = 1 then
      begin
      listbox2.items.add('');
      delete(s,1,1);
      end else
      begin
      listbox2.items.add(copy(s,1,pos('|',s)-1));
      delete(s,1,pos('|',s));
      end;
      end;
      end;
      </pre&gt

      Comment


      • #4
        Hallo,

        der folgende Code demonstriert das Verfahren des Splittens. Statt einer 2. Listbox nimmst du z.B. eine Stringlist und verteilst dann die Einträge auf die Edit-Felder.
        <pre>
        procedure TForm1.Button1Click(Sender: TObject);
        var s : string;
        begin
        s := listbox1.items[0];
        while pos('|',s) > 0 do
        begin
        if pos('|',s) = 1 then
        listbox2.items.add('')
        else
        listbox2.items.add(copy(s,1,pos('|',s)-1));
        delete(s,1,pos('|',s));
        end;
        end;
        </pre>

        Gruß Ul

        Comment


        • #5
          muss ich die gefilterten daten von tlistbox2 in ein teditfeld kopieren oder, oder geht es direkt von der tlistbox1 aus? grüße und vielen dan

          Comment


          • #6
            Hallo,

            da gibt es verschiedene Möglichkeiten.

            Ich würde es so machen:

            Benenne deine Edit-Felder z.B. von edit0 bis edit9 fortlaufend. Dann kannst du den Inhalt der Listbox bzw. später der Stringlist in einer Schleife einlesen:
            <pre>
            for i := 0 to listbox2.items.count -1 do
            TEdit(FindComponent('edit' + inttostr(i))).text := listbox2.items[i];
            </pre>

            Gruß Ul

            Comment


            • #7
              <font size=2 face="Courier New"><font color="#000000">hallo&nbsp;es&nbsp;funktioniert&nb sp;echt&nbsp;gut,&nbsp;danke.
              habe&nbsp;aber&nbsp;noch&nbsp;ein&nbsp;problem&nbs p;damit,&nbsp;daß&nbsp;immer&nbsp;nur&nbsp;der&nbs p;erste&nbsp;eintrag&nbsp;der&nbsp;listbox&nbsp;<b >in
              </b>den&nbsp;editfeldern&nbsp;dargestellt&nbsp;wird. &nbsp;habe&nbsp;versucht&nbsp;das&nbsp;problem&nbs p;mit&nbsp;dem&nbsp;unten&nbsp;gezeigten&nbsp;scri pt&nbsp;zu
              lösen,&nbsp;aber&nbsp;es&nbsp;geht&nbsp;einfach&nb sp;nicht.
              der&nbsp;text&nbsp;der&nbsp;<b>in</b>&nbsp;die&nbsp;tlistbox&nbsp;geladen&nbsp;wird&n bsp;hat&nbsp;mehrere&nbsp;zeilen,&nbsp;aber&nbsp;j ede&nbsp;zeile&nbsp;hat
              den&nbsp;gleichen&nbsp;aufbau,&nbsp;wie&nbsp;text1 |text2||text3|&nbsp;usw.&nbsp;ich&nbsp;glaube,&nbs p;das&nbsp;hätte&nbsp;ich&nbsp;schon
              von&nbsp;anfang&nbsp;an&nbsp;erzählen&nbsp;sollen.
              hier&nbsp;das&nbsp;script&nbsp;:
              <b>procedure</b>&nbsp;TForm1.ListBox1Click(Sender:&nbsp;TObject) ;
              <b>var</b>&nbsp;s&nbsp;:&nbsp;<b>string</b>;

              i:Integer;

              <b>begin
              for</b>&nbsp;i:=&nbsp;ListBox1.Items.Count&nbsp;-1&nbsp;<b>downto</b>&nbsp;0&nbsp;<b>do
              if</b>&nbsp;ListBox1.Selected[i]&nbsp;<b>then
              </b>&nbsp;&nbsp;s&nbsp;:=&nbsp;listbox1.items[0];
              &nbsp;&nbsp;<b>while</b>&nbsp;pos('|',s)&nbsp;&gt;&nbsp;0&nbsp;<b>do
              </b>&nbsp;&nbsp;<b>begin
              </b>&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b>&nbsp;pos('|',s)&nbsp;=&nbsp;1&nbsp;<b>then
              </b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listbox2.ite ms.add('')
              &nbsp;&nbsp;&nbsp;&nbsp;<b>else
              </b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listbox2.ite ms.add(copy(s,1,pos('|',s)-1));
              &nbsp;&nbsp;&nbsp;&nbsp;delete(s,1,pos('|',s));

              &nbsp;&nbsp;&nbsp;&nbsp;<b>for</b>&nbsp;i&nbsp;:=&nbsp;0&nbsp;<b>to</b>&nbsp;listbox2.items.count&nbsp;-1&nbsp;<b>do
              </b>&nbsp;&nbsp;&nbsp;&nbsp;TEdit(FindComponent('Edi t'&nbsp;+&nbsp;inttostr(i))).text&nbsp;:=&nbsp;lis tbox2.items[i];

              &nbsp;&nbsp;<b>end</b>;
              &nbsp;&nbsp;<b>end</b>;

              <b>end</b>.

              gr&uuml;ße
              </font></font&gt

              Comment


              • #8
                Hallo,

                nee, das kann so nicht gehen. Du fängst zwar korrekt mit einer Schleife an (der Zähler ist i), schreibst aber dann listbox1.items[0] statt listbox1.items[i].

                Un das .selected[i] musst du auch rausnehmen.

                Hier der Code:
                <pre>
                for i := 0 to listbox1.items.count -1 do
                begin
                s := listbox1.items[i];
                while...
                ...
                end;
                </pre>

                Wenn du demnächst wieder Code postest, beachte mal die Hinweise über dem Eingabe-Feld deines Beitrages. Wenn du den Code in pre-Tags einschließt, erscheint er richtig formatiert.

                Gruß Ul

                Comment


                • #9
                  ich habs....vielen dank

                  Comment

                  Working...
                  X