AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi String auslesen und auf zeichen reagieren und und und ...
Thema durchsuchen
Ansicht
Themen-Optionen

String auslesen und auf zeichen reagieren und und und ...

Offene Frage von "Axxus"
Ein Thema von Axxus · begonnen am 19. Okt 2006 · letzter Beitrag vom 29. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#1

String auslesen und auf zeichen reagieren und und und ...

  Alt 19. Okt 2006, 00:20
HI Delphianer

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

Das ist ziemlich unprofessional

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

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
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

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

  Alt 19. Okt 2006, 07:26
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#3

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

  Alt 19. Okt 2006, 11:57
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
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 19. Okt 2006, 12:25
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
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#5

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

  Alt 19. Okt 2006, 12:46
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 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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 19. Okt 2006, 13:04
Oki also folgendes:

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

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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 19. Okt 2006, 14:03
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 19. Okt 2006, 15:18
Su Sorry aber ich bin erst 15 und das is mir noch en bisi kompliziert

HAt jemand anderes noch was

Axxus
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#9

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

  Alt 19. Okt 2006, 15:31
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.
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#10

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

  Alt 19. Okt 2006, 16:04
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 !
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.
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