Announcement

Collapse
No announcement yet.

String "real-time" parsen

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

  • String "real-time" parsen

    In einem TEdit.KeyDown-Event möchte ich während der Benutzer tippt die Worte analysieren. Also immer was tun, wenn ein Leerzeichen (Abstand) getippt wurde.

    Während der Eingabe von „eins zwei drei vier" müssten also diese Worte – das heisst immer nur das zuletzt (vollständig) getippte (zuletzt „vier") einer Funktion übergeben werde.

    Wie parse ich das vernünftig ?

    Danke & Gruss
    Roger

  • #2
    Hallo,

    mein Vorschlag:
    -------------------------------------------------------------------------
    <i>function GetWort(s: String;p: Integer): String;
    var i : Integer;
    begin
    if Pos(' ',s) = 0 then//erstes Wort im Edit
    Result := s
    else
    begin//bis voriges Leerzeichen
    i := p;
    while s[i] <> ' ' do
    dec(i);
    Result := Copy(s,i+1,p-i+1);
    end;
    end;</i>
    --------------------------------------------------------------------------
    <i>procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    var i : Integer;
    s : String;
    begin
    if Key = 32 then
    begin
    i := Edit1.SelStart;
    s := Edit1.Text;
    if Length(s) > 1 then//falls erstes Zeichen ein Leerzeichen
    if s[i] <> ' ' then//falls zwei Leerzeichen
    TuWasDamit(GetWort(s,i));
    end;
    end;</i&gt

    Comment


    • #3
      Hallo Roger,
      ich habe ein TEdit und ein TMemo auf ein neues Fenster gelegt.

      unit Unit1;

      interface

      uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, StrUtils;

      type
      TForm1 = class(TForm)
      Edit1: TEdit;
      Memo1: TMemo;
      procedure Edit1Change(Sender: TObject);
      private
      { Private-Deklarationen }
      public
      { Public-Deklarationen }
      end;

      var
      Form1: TForm1;

      implementation

      {$R *.dfm}

      procedure TForm1.Edit1Change(Sender: TObject);
      begin
      if copy(reversestring(edit1.Text),1,1) = ' ' then begin
      memo1.lines.add(reversestring( copy(reversestring(edit1.Text),2,pos(' ',edit1.Text)-1)));
      end;
      end;

      end.

      Hoffe, dass es das ist was Du dir vorgestellt hast,

      cu Michae

      Comment


      • #4
        Hallo<p>
        Benutze einfach TStringList.<br>
        Such in der Hilfe nach Delimiter, DelimitedText.
        <p>
        Heik

        Comment

        Working...
        X