Minimix: Text aus Datei löschen

Hallo

ich habe eine Datei mit einer Klassenbeschreibung. Diese Klasse enthält Methoden unterschiedlichster Komplexitätsstufe. Hier zwei einfache Beispiele

  
<?php  
  
class test{  
  
   public function setSome(){  
     foreach($this->some as $t){  
         if($x){  
            $this->parseSome();  
         }  
      }  
   }  
  
   public function setSomeOther(){  
     foreach($this->some as $t){  
         if($x){  
            $this->parseSome();  
         } else {  
            $this->purify();  
         }  
      }  
   }  
  
}  
  

ich würde gerne diese Datei einlesen und je nachdem eine Methode aus dieser Datei rauslöschen. Wie würde man da am besten elegant vorgehen? Mit Regex stelle ich mir das u.U. schwierig vor. Wäre für jeden Tipp dankbar.

  1. Tach!

    ich würde gerne diese Datei einlesen und je nachdem eine Methode aus dieser Datei rauslöschen. Wie würde man da am besten elegant vorgehen? Mit Regex stelle ich mir das u.U. schwierig vor.

    PCRE kennt Recursive Patterns. Damit kann man Klammernpaare finden - allerdings nur, wenn sie wirklich paarig vorkommen und nicht einzeln in Strings oder ähnlich. Ansonsten musst du dir einen Mini-Parser schreiben, der auch Strings erkennt und deren Inhalt unberücksichtigt lässt. (PHPs Tokenizer kann helfen.)

    dedlfix.

    1. Hi,

      ich würde gerne diese Datei einlesen und je nachdem eine Methode aus dieser Datei rauslöschen. Wie würde man da am besten elegant vorgehen? Mit Regex stelle ich mir das u.U. schwierig vor.

      PCRE kennt Recursive Patterns. Damit kann man Klammernpaare finden - allerdings nur, wenn sie wirklich paarig vorkommen und nicht einzeln in Strings oder ähnlich. Ansonsten musst du dir einen Mini-Parser schreiben, der auch Strings erkennt und deren Inhalt unberücksichtigt lässt. (PHPs Tokenizer kann helfen.)

      das geht dann (ganz sachte) in Richtung Interpreter? Oder sehe ich das falsch? Den Tokenizer kenne ich nicht, nur vom Hörensagen, muss ich mir mal angucken. Danke für den Tip.

    2. Hi nochmal,

      PCRE kennt Recursive Patterns. Damit kann man Klammernpaare finden - allerdings nur, wenn sie wirklich paarig vorkommen und nicht einzeln in Strings oder ähnlich. Ansonsten musst du dir einen Mini-Parser schreiben, der auch Strings erkennt und deren Inhalt unberücksichtigt lässt. (PHPs Tokenizer kann helfen.)

      Der Tokenizer ist genial. Genau das, was ich brauche! Danke!

  2. Lieber Minimix,

    Du wirst einen Parser benötigen, denn mit RegExen geht das schief.

    ich würde gerne diese Datei einlesen und je nachdem eine Methode aus dieser Datei rauslöschen.

    Warum? Was willst Du denn damit erreichen?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix,

      Du wirst einen Parser benötigen, denn mit RegExen geht das schief.

      hm, ja, das stimmt wohl.

      ich würde gerne diese Datei einlesen und je nachdem eine Methode aus dieser Datei rauslöschen.

      Warum? Was willst Du denn damit erreichen?

      ich bastel mir gerade ein kleines Framework, und ich will die Klassen (für Modelle, Controller) dynamisch per Konsole verwalten (updaten, löschen, installieren). Mal vereinfacht gesagt. Dazu gehört eben auch, dass u.U. nicht mehr benötigte Methoden "deinstalliert" werden, sprich aus den Klassendefinitionen gelöscht werden. Im Prinzip will ich auf Knopfdruck eine funktionstüchtige Web-Applikation generieren.

      1. Hi,

        ich bastel mir gerade ein kleines Framework, und ich will die Klassen (für Modelle, Controller) dynamisch per Konsole verwalten (updaten, löschen, installieren). Mal vereinfacht gesagt.

        Ob/wie das sinnvoll ist … lasse ich mal dahin gestellt sein.

        Dazu gehört eben auch, dass u.U. nicht mehr benötigte Methoden "deinstalliert" werden, sprich aus den Klassendefinitionen gelöscht werden. Im Prinzip will ich auf Knopfdruck eine funktionstüchtige Web-Applikation generieren.

        Wäre es da nicht sinnvoller, das Pferd genau anders herum aufzuzäumen?

        Eine Liste von vorgefertigten Methoden (die meinetwegen alle als Code-Schnippsel in einzelnen kleinen Textdateien oder der Datenbank rumliegen), die per Checkbox an- und abgewählt werden können – und dann beim Speichern werden nur die angekreuzten zwischen
        class Foo {
        und
        }
        aneinander gehängt und dann als Foo.php gespeichert bzw. überschrieben …?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          ich bastel mir gerade ein kleines Framework, und ich will die Klassen (für Modelle, Controller) dynamisch per Konsole verwalten (updaten, löschen, installieren). Mal vereinfacht gesagt.

          Ob/wie das sinnvoll ist … lasse ich mal dahin gestellt sein.

          sehr sinnvoll sogar. Zumindest spare ich mir einiges an immer wiederkehrender Schreibarbeit. Verwalten ist allerdings etwas übertrieben. Wenn eine App "installiert" wird, werden die dazugehörigen Skeletons geschrieben, mehr nicht.

          Dazu gehört eben auch, dass u.U. nicht mehr benötigte Methoden "deinstalliert" werden, sprich aus den Klassendefinitionen gelöscht werden. Im Prinzip will ich auf Knopfdruck eine funktionstüchtige Web-Applikation generieren.

          Wäre es da nicht sinnvoller, das Pferd genau anders herum aufzuzäumen?

          Eine Liste von vorgefertigten Methoden (die meinetwegen alle als Code-Schnippsel in einzelnen kleinen Textdateien oder der Datenbank rumliegen), die per Checkbox an- und abgewählt werden können – und dann beim Speichern werden nur die angekreuzten zwischen
          class Foo {
          und
          }
          aneinander gehängt und dann als Foo.php gespeichert bzw. überschrieben …?

          ich hatte mich da etwas unklar ausgedrückt. Natürlich kommen manchmal auch Methoden dazu bzw. werden vom User verändert. Diese dürfen im Falle eines Updates natürlich nicht mehr überschrieben werden. Deshalb muss ich schon genau wissen, welche Methode ich entfernen darf und welche nicht. Ansonsten ist deine Idee nicht schlecht, mit den Code-Schnippseln mache ich aber sowieso genau so.

          1. Lieber Minimix,

            Natürlich kommen manchmal auch Methoden dazu bzw. werden vom User verändert. Diese dürfen im Falle eines Updates natürlich nicht mehr überschrieben werden. Deshalb muss ich schon genau wissen, welche Methode ich entfernen darf und welche nicht.

            also brauchst Du eine Art Paketverwaltung wie es die Linux-Distros auch haben. Erfinde also eine Möglichkeit, wie Du Abhängigkeiten zwischen Methoden verwalten kannst.

            Liebe Grüße,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Hallo Felix!

              Natürlich kommen manchmal auch Methoden dazu bzw. werden vom User verändert. Diese dürfen im Falle eines Updates natürlich nicht mehr überschrieben werden. Deshalb muss ich schon genau wissen, welche Methode ich entfernen darf und welche nicht.

              also brauchst Du eine Art Paketverwaltung wie es die Linux-Distros auch haben. Erfinde also eine Möglichkeit, wie Du Abhängigkeiten zwischen Methoden verwalten kannst.

              Nee... die Tatsache, ob eine Methode existieren soll oder nicht, bleibt schon dem Mann an der Konsole überlassen bzw. gewisser anderer vordefinierter Tatsachen. Paketverwaltung oder sowas krasses braucht's dann doch nicht :) Das wäre dann eventuell später mal für verschiedene, voneinander abhängige Module interessant. Aber nicht so low-level (wenn man in diesem Fall überhaupt von low level sprechen darf).

              Danke für eure Tips und Mühen!
              Mini mix

              1. Nee... die Tatsache, ob eine Methode existieren soll oder nicht, bleibt schon dem Mann an der Konsole überlassen

                Dann viel Spass, wenn durch menschliches Versagen deine Applikation zerschossen wird und du nochmal von Vorne anfangen musst.
                Eine Abhängigkeitsprüfung, um menschliches Versagen auszuschliessen, ist IMO hier absolut notwendig.