Delphi-PRAXiS

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 !

Axxus 19. Okt 2006 16:25

Re: String auslesen und auf zeichen reagieren und und und ..
 
so ähnlich hab ich es bisher auch bsi auf die liste nnun ist es aber wieder
If befehl = 1 Then
If befehl = 2 Then
If befehl = 3 Then
.
.
.

Ich will erst ma wissen wie ich den Teilstring der in der KLammer steht als string speichern kann also filtern kann ich weiß ja net wie lang der sein wird deswegen sollen den die Klammern begrenzen und der Teil soll gefiltert werden

Und dann will ich so was wie ne Prozedure haben

Wenn ich das richtig aus anderen Posts und tuts verstanden habe dann wird das Programm benachrichtigt wenn das Ereigniss eintritt zum beispiel on destroy da wird nicht jede sek gefragt ob das Ereigniss eintritt sondern das Programm wird informiert.

So z.B.

Delphi-Quellcode:
procedure TForm1.Eingabe = Memo.Color(Sender: TObject);
begin
Memo.Color := ??
end;
Axxus

bepe 19. Okt 2006 18:02

Re: String auslesen und auf zeichen reagieren und und und ..
 
Vor weg: Wenn du schon nicht weißt wie du den eingegeben Befehl parsen (zerlegen) kannst, solltest du dir nicht zu viele Hoffnung auf Erfolg machen. Zumindest kann ich mir nicht vorstellen das dir die Umsetzung in der von dir angedachten Form zeitnah gelingen wird.

Aber egal, ich will dich ja gar nicht entmutigen.

Sieh dir Copy, Delete und Pos an, damit kannst du die Befehle "parsen". Dann würde ich einfache ein Klasse erstellen, die mir als Funktionssammlung dient. Dann kannst du nämlich die geparsten Befehle ohne hundert if-Statements mit der Funktion "GetMethodProp" (Unit: TypInfo) ermitteln und ausführen.

Windows bekannte Funktionen, könntest du auch direkt von Windows abarbeiten lassen. Siehe dir dazu mal ShellExecute aus der Unit ShellApi an.

Dies sind jetzt nur ein par Stichworte aber ich denke das hilft dir Informationen zu finden. Fang mit der String-Verarbeitung an, mache Versuche mit ShellExecute, wag dich dann eine Klasse und dann versuch dein Vorhaben um zu setzen. Und immer daran denken F1 (ist zumindest in Delphi) eine wunderbare Taste.

mfg,
bp

Axxus 19. Okt 2006 19:58

Re: String auslesen und auf zeichen reagieren und und und ..
 
Ich wusst net das parsen zerlegen heißt :oops: :oops: :oops:
Aber wie willst du nen string zerlegen der unterschiedlich lang ist beim einen mal ist der linke abschnitt 6 zeichen beim nächsten befehl 13 ...
deswegen soll der prog ja auch die klammern suchen und den string dann zerlegen das andere weiß ich schon mit copy usw
aber der string ist ja immer unterschiedlich lang also kann ich ihm ja net die zeichennr geben :?: :!: :?:

Den rest zieh ich mir ma rein und seh ob ich damit was anfangen kann :thumb:

Ich muss noch ma wissen wie ich nen unterscheidlich langes string zerlegen kann

Edit unter GetMethodProp hab ich nix gefunden

Axxus

Klaus01 19. Okt 2006 20:05

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

Zitat von Axxus
I... 6 zeichen beim nächsten befehl 13 ...
deswegen soll der prog ja auch die klammern suchen und den string dann zerlegen das andere weiß ich schon mit copy usw
aber der string ist ja immer unterschiedlich lang also kann ich ihm ja net die zeichennr geben :?: :!: :?:

Axxus

Die Position der Klammer bekommst Du doch mit pos('(',string) und pos(')',string).
Grüße
Klaus

bepe 19. Okt 2006 20:11

Re: String auslesen und auf zeichen reagieren und und und ..
 
Mit GetMethodProp solltest du vielleicht auch nicht beginnen. In der Delphi-Hilfe wirst du dazu wohl auch nichts finden aber im Internet. Ein weiteres, dazu passendes, Suchwort ist RTTI (RunTime TypeInformation).
Sorg erstmal dafür das du (bzw. dein Pogramm) die Befehle und Parameter zuverlässig erkennst.

Wie erwähnt ich hab dir nur ein par Suchwörter/Stichpunkte genannt. Wenn du diese in DP (und dem restlichem Internet) und in der Delphi-Hilfe verwendest, solltest du ein gutes Stück vorran kommen.

Edit:
Da fällt mir ein: Tutorial zur Stringverarbeitung Das wird dir erstmal helfen.

Axxus 24. Okt 2006 13:37

Re: String auslesen und auf zeichen reagieren und und und ..
 
so Strings zerlegen (Parsen^^) kann ich jetzt und ne Klasse erstellen auch
Hat einer ma en tut zu RTTI und GetMethodProp geben???

Danke im voraus

Axxus

Axxus 29. Okt 2006 14:23

Re: String auslesen und auf zeichen reagieren und und und ..
 
Leute das kann irgentwie net sein jeder sagt mir das ich RTTI benutzen soll aber keiner hat en tut
Ivch such jetzt schon seit einer woche im i net und hab nix gefunden es war immer nur die rede davon aber niergens en stück quelltext odert ne beschreibung wie mans nutzen kann

Kan mir bitte jmn sagen was RTTI ist und mir wenn möglich ne einweisung oder ne tut geben ich will nämlich mit meinem Porgramm weiterkommen

BITTE

Axxus


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.

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