Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi String auslesen und auf zeichen reagieren und und und ... (https://www.delphipraxis.net/79246-string-auslesen-und-auf-zeichen-reagieren-und-und-und.html)

Axxus 18. Okt 2006 23:20


String auslesen und auf zeichen reagieren und und und ...
 
HI Delphianer :hi:

Ich hab wie immer schon gesucht aber nix gefunden

Also folgendes Es geht wieder um meine Konsole:

Zum Verstänidniss die Konsole soll auf befehle die in ein Edit eingegeben werden reagieren

Das werden denk ich ziemlich viele Befehle :!: :!:

Bis jetzt hab ich es immer so gemacht das Die eingabe durch eine reihe von If Abfragen geluafen sind

Also :

Sind die ersten 4 Ziffern = Memo dann...

Sind die ersten 7 ziffern = Konsole dann...

Jetzt hab ich mir gedacht :gruebel:

Das ist ziemlich unprofessional :wall:

Deswegen will ich es jetzt so machen das der Befehl in einer Klammer steht und Jede Befehlsform mit einem . Zeichen abgetrennt wird

Also so

(Memo.font.color) = ($ff0000)

So jetzt mein Problem:

Ich weiß nicht wie ich es machen kann das Mein Programm nach dem Enter drücken die Klammern sucht und Den Gesamtstring schon mal in teilsttringe zerlegt Soll dann also so aussehen

Eingabe = '(Memo.font.color) = ($ff0000)'
Eingabe1 = 'Memo.font.color'
Eingabe2 = '='
Eingabe3 = '$ff0000'

So aber damit nicht genug :mrgreen:

Jetzt soll das Programm die Eingabe auch noch als Befehl interpretieren aber nicht nur als If Abfrage :?: :?:

Ich hoffe ihr wisst jetzt was gemeint ist oder :?:

Ich will mir zumindest für die Objekte die If Abfrage ersparen das Programm soll also automatisch den String in einen befehl umwandeln Eingabe1 gibt den Linken Teil eingabe 2 den Operator und Eingabe 3 den zugewiesenen Wert :!: :!:

Jetzt Will Ich aber nicht
If Eingabe1 := 'memo.font.color' then...
If eingabe1 := 'Memo.Height Tehn...
If eingabe1 := 'Memo.weight' Then...
.
.
.

Ich hoffe es ist klar geworden was ich meine :?: :!: :?:

Teilantworten sind auch OK

danke im Vorraus

:!: Axxus :!:

chaosben 19. Okt 2006 06:26

Re: String auslesen und auf zeichen reagieren und und und ..
 
So ... ich gehe nun folgend davon aus, das du folgendes willst:
Du willst per Befehl in einem Edit-Feld die Eigenschaften eines Memos verändern.

Imho hast du folgendes Problem (was du selbst, glaube ich, noch nicht weißt): Du kennst die Eigenschaften des Memos nicht (welche es gibt und welchen Typ sie haben). Natürlich könntest du sie hart codieren, aber da du ja auf der Suche nach dem professionellen Weg bist, wäre das falsch.
Dieses Problem kannst du auf Basis von RTTI und der Unit "TypInfo" lösen.

Was deine Frage angeht würde ich dir folgendes empfehlen: Wenn du nur Zuweisungen vornehemen willst, kannst du das "=" als Ausgangspunkt nehmen. Alles links davon ist der Variablenname, aus dem du noch eventuell störende Zeichen (nicht "Ziffern" ;) ) entfernen musst. Rechts vom Operator steht der neue Wert.
Und das ist schon alles. :)

Axxus 19. Okt 2006 10:57

Re: String auslesen und auf zeichen reagieren und und und ..
 
Vieleicht kam das nicht so deutlich rüber

Mein Programm soll um die Hundert Befehle haben von Layoutänderungen zum Pc runterfahren bis zun verändern von Attributen von Dateien...

So JEtzt will ich aber nicht das Der String der Bei der Eingabe rauskommt durch Hundert IF Then abfragen läuft da das zum einen sehr unprofessionell ist zum anderen ist das ziemlich viel Schreibarbeit und zumm Dritten ist das net so gut für den Prozessor.

Deswegen will ich es so machen (hab ich mir nämlich so vorgestellt


1 der Teil in der Ersten Klammer soll zu dem Linken teil eines Befehls werden und dann soll das so berechnet werden

oder

2 Was ich mir gestern abend überlegt hab ich weiß nicht ob das möglich ist und wie ich das mache aber es wäre gut wenn ich Hundert Prozeduren schreibe und die Prozedur wird nur aufgerufen wenn der erste Teil des Strings so oder so lautet. Ivh hoffe das stimmt so denn ich glaube das wenn man es mit Prozeduren macht nicht bei jeder Eingabe KOntroliert wird ob der Wert eines Strings so und so ist sondern das Die Prozedur benachrichtigt wird wenn es so und so ist Heißt das die Prozedur geziehlt angesteiuert wird :?: :!: :?:

2 Wäre mir lieber und ist mir erst gstern eingefallen

Ist so was möglich wenn ja wie

und was ist professioneller 1 oder 2 :?: :?: :?:

Axxus

Axxus 19. Okt 2006 11:25

Re: String auslesen und auf zeichen reagieren und und und ..
 
HAb ich vergessen was ich auch noch brauch ist wie kann ich den Teil suchen der in Klammern steht und den in einen anderen striing schreiben

Axxus

chaosben 19. Okt 2006 11:46

Re: String auslesen und auf zeichen reagieren und und und ..
 
Zitat:

Zitat von Axxus
Mein Programm soll um die Hundert Befehle haben von Layoutänderungen zum Pc runterfahren bis zun verändern von Attributen von Dateien...

Wenn das so ist, dann solltest du die Sache vielleicht etwas angehen. Ich würde es wie in der cmd.exe/command.com/Unix-Shell machen: Als erstes kommt ein Kommando und dann n Paramter.
Beispiel: set "Memo1.Color" "blue"
Sowas würde sich ganz einfach mit einer StringList (Delimiter " ") parsen lassen.
Um den Rechner herunterzufahren würde ein shutdown als Befehl reichen.

Natürlich ist bei diesem Vorgehen der Befehlsatz auf die Befehle festgeschrieben, die du in deinem Programm definierst. Ein Umweg wären selbstregistrierende DLL's, die ein/mehrere Befehle im Hauptprogramm registrieren und sich um deren Ausführung kümmern. Das ist aber ein erheblicher Aufwand.

Wir könnten dir viel besser helfen, wenn du uns sagst was du wirklich machen willst ({$region "OffTopic"}Ich vermute mal ein Programm um einen anderen Rechner fern zu steuern{$endregion}).

Btw.:
Zitat:

Zitat von Axxus
und zumm Dritten ist das net so gut für den Prozessor

Ein Prozessor wird hergestellt damit er rechnet. Wenn er also rechnet, schadet es ihm nicht. :-D

Axxus 19. Okt 2006 12:04

Re: String auslesen und auf zeichen reagieren und und und ..
 
Oki also folgendes:

Ich weiß noch nicht ob es was wid denn ich hab immer nur i intervallen lust auf proggen :wall:

Aber ich hab mir vorgenommen ne Konsole zu machen die das komplette Windows steuern kann

Beispil an Befelen:

Layout verändern
Herunterfahren
Neustarten
Standby
Exe öffnen
Läutstärke verstellen
Datei öffnen
Darteiattribute verändern
.
.
.

So das ganze will ich in ner KOnsole machen als vorbild hab ivch mir cmd genommen aber der aufbau ist anders ich hab oben ein memo und drunter ein Edit und einen Button so wie die KOnsole von cs falls ihr die Kennt

So damit ich die Eingabe nicht durch 100 If Abfragen leiten muss suche ich eine schnellere und professionelere Lösung

Ich hab noch kein Festes konzept deswegen suche ich ja Hilfe wie ich das machen kann jedenfalls muss ich mich für eines entscheiden und das dann Kosequent verfolgen da das umschreiben sehr lange dauern würde

Zu dem Offtopic

Ich weiß noch nicht ob ich ne Lan abteilung mit reinnehmen soll heißt auf nem anderen Pc nen Programm starten usw.
Vorab es soll nichts mit Viren und Trojanern zutun haben soviel kann ich schon mal versprechen auch wenn isch das in anderen Topichs so anhört wenn ich nen Lanabschnit reinmache dann soll der eher so aussehen wie MAster Eye falls das einer kennt also mit dem Teil will ich Benutzern die Möglichkeit geben als Admin auf andere rechner zuzugraeifen wie halst in der Schule in der der Lehrer ja auch die rechner von seinen Schülern steuern kann.

Nochmal

1. Ich weiß net ob ich das da reinmache :!: :!: :!:
2. Wenn ja dann nur mit autorisierungsabfrage ob der das darf :!: :!: :!:
3. Es hat nix mir Viren zutun :!: :!: :!:


Um das klarzustellen ich hab nämlich schon die erfahrung gemacht das es sobalt es um andere rechner steuern geht die Leute misstrauisch werden und mir net mehr helfen wollen deswegen wollt ich das klarstellen :!: :!: :!:

So also weiß jmn wie ich vorgehen soll

Axxus

Christian Seehase 19. Okt 2006 13:03

Re: String auslesen und auf zeichen reagieren und und und ..
 
Moin Axxus,

da empfehle ich Dir, Dich mal mit Bei Google suchenCompilerbau und Parsern zu beschäftigen.
Das Stichwort DEA (Determinierender Endlicher Automat) wird Dir auch etwas für Deine Problemlösung liefern.

Axxus 19. Okt 2006 14:18

Re: String auslesen und auf zeichen reagieren und und und ..
 
Su Sorry aber ich bin erst 15 und das is mir noch en bisi kompliziert

HAt jemand anderes noch was

Axxus

kalmi01 19. Okt 2006 14:31

Re: String auslesen und auf zeichen reagieren und und und ..
 
Hi Axxus,

schau Dir Doch mal DelphiWebScript o.ä. an.
Das ist ein Pascal-Interpreter, den Du in dein Projekt einbauen kannst.
Kannst Dir dann für alles mögliche eigene Kommandos in Delphi basteln und das Parsen und Ausführen überlässt Du der Engine.
Da Performance beim verstellen von System-Parametern bzw. Aufrufen von System-Kommandos nicht unbedingt ein Problem ist, würde ich auf alle Fälle irgend eine Script-Lösung wählen.
Gibt noch diverse andere Interpreter für delphi, oben genannter war nur ein Beispiel, das mir gerade einfiel.
Oder z.B. PHP4Delphi, usw.

chrisw 19. Okt 2006 15:04

Re: String auslesen und auf zeichen reagieren und und und ..
 
Also, ich habe (weil es mich einfach interessiert) mal versucht so etwas zu bauen !

Ich denke, das ist keine schöne Lösung, aber es funktioniert.

Ich habe ein Form mit einem Edit (Edit1) und einem Memofeld (Memo1)

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    BefehlListe : TStringList;
    Befehl : Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Befehl := -1; //kein Befehl
  BefehlListe := TStringList.Create;
  //Dies gilt nur der Veranschaulichung,
  //später würde ich die Befehle aus einer textDatei Laden (
  // mit BefehlListe.Loadfromfile('BefehlFile.dat');
  BefehlListe.Add('MEMO.FONT.COLOR'); //0
  BefehlListe.Add('MEMO.HEIGHT');    //1
  BefehlListe.Add('MEMO.WEIGHT');    //2 Wobei ich denke, dass Du Width meinst
  // usw. .......
end;

//OnKeyDown des Edit
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var Index : Integer;
begin
  if (Key = VK_Return) then
  begin
    if Edit1.text = '=' then //Das = war ja von Dir gewünscht, aber es tut nichts
    begin
      Edit1.Text := '';
      exit;
    end;
    if Befehl <> -1 then
    begin
      case Befehl of
              0 : begin //Memo.Font.Color
                    try
                      Memo1.Font.Color := TColor(Edit1.Text);
                    except
                      ShowMessage('ungültige Eingabe');
                    end;
                  end;
              1 : begin //Memo.Height
                    try
                      Memo1.Height := StrToInt(Edit1.Text);
                    except
                      ShowMessage('ungültige Eingabe');
                    end;
                  end;
              2 : begin //Memo.Weight
                    try
                      Memo1.Width := StrToInt(Edit1.Text);
                    except
                      ShowMessage('ungültige Eingabe');
                    end;
                  end;
              // usw ................
        end;
    end;
    Befehl := BefehlListe.IndexOf(UPPERCASE(Edit1.text));
    Edit1.Text := '';
  end;
end;

end.

Kannst ja mal gucken ob es das ist was Du meinst !


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz