asc File Zeilen Suchen und entfernen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

Sirius3 hat geschrieben: Montag 5. August 2019, 12:40 Nein, Du hast ja irgendwoher dieses XML. Und darin ist sind Formeln, und diese müssen ja irgendeiner Syntax folgen. Hast Du eine Beschreibung des XML-Formats?

Und nein, Du mußt nicht die '' wegbekommen, sondern den String parsen, das heißt, in eine Form bringen, mit der Du rechnen kannst. Dazu müßte man aber wissen, nach welcher Syntax diese Formeln beschrieben sind.
Nach welcher Syntax die folgen kann ich dir leider nicht sagen, dies weiß ich selbst nicht mal. Es ist ein Gerät welche die Steuergeräte erprobt samt einer Lastbox usw.... und die Parameter werden als xml gespeichert und die Ergebnisse als asc File
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na das muss ja schon irgendwo dokumentiert sein, der Hersteller des Geraetes zB wird schon wissen, was da reingeschrieben wird.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Was soll der Name `liste_in_welcher_die_xml_File_ausgelesen_und_die_notwendigen_Daten_gespeichert_werden` über den Inhalt, welcher in dieser Variable gespeichert ist, aussagen? Woher der Inhalt kommt ist eigentlich egal, und dass es sich um notwendige Daten handelt, ergibt sich wohl von selbst, weil sonst würdest Du sie nicht speichern.
Wenn Du Probleme hast, einen sinnvollen Namen zu finden, dann hast Du wahrscheinlich noch nicht ganz verstanden, was Du machen willst.
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

__deets__ hat geschrieben: Montag 5. August 2019, 13:02 Na das muss ja schon irgendwo dokumentiert sein, der Hersteller des Geraetes zB wird schon wissen, was da reingeschrieben wird.
Ich bin hier nur ein Praktikant, mehr weiß ich nun mal nicht :o
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

Es gibt noch weitere Formeln z.B.:

Code: Alles auswählen

v*5/4095
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Aber wir sollen das wissen? Woher denn bitte? Und auch wenn du Praktikant bist, kannst du doch jemanden fragen. Tust du hier ja auch 🤷🏼‍♂️

Den Formeln so wie sie da sind kannst du nur auf zwei Arten beikommen: entweder sind das beliebige viele, dann musst du in das verstehen und parsen der Formeln investieren. Ohne Dokumentation und Hilfe des Herstellers geht’s nicht.

Oder es sind beschränkt viele. Dann kannst du ein Wörterbuch mit den entsprechenden lambdas anlegen, das eine Formel in Textform auf den Ausdruck in Python abbildet.

Also so etwas:

Code: Alles auswählen

FORMULAS = { 
    "v*4095": lambda v: v*4095,
.....}
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

__deets__ hat geschrieben: Montag 5. August 2019, 14:25 Aber wir sollen das wissen? Woher denn bitte? Und auch wenn du Praktikant bist, kannst du doch jemanden fragen. Tust du hier ja auch 🤷🏼‍♂️

Den Formeln so wie sie da sind kannst du nur auf zwei Arten beikommen: entweder sind das beliebige viele, dann musst du in das verstehen und parsen der Formeln investieren. Ohne Dokumentation und Hilfe des Herstellers geht’s nicht.

Oder es sind beschränkt viele. Dann kannst du ein Wörterbuch mit den entsprechenden lambdas anlegen, das eine Formel in Textform auf den Ausdruck in Python abbildet.

Also so etwas:

Code: Alles auswählen

FORMULAS = { 
    "v*4095": lambda v: v*4095,
.....}
Das mit dem Wörterbuch klingt ganz vernünftig, denke jetzt nicht, dass es so viele unterschiedliche Formeln gibt.
Das waren zumindest die Formen aus den letzten Projekt nur das hier x statt v war....

Code: Alles auswählen

x*(5/4095)*8.655106
(x -2)*0.00257038-0.5
(x -1)*0.125-73.025
Da es aber eine GUI hat könnte ich doch ein Eingabefeld implementieren, das könnte doch die Lösung sein oder? Jetzt wird die Formel in einem QLineEdit angezeigt um die Formel zu kontrollieren ob diese auch wirklich Stimmt... könnte man hier statt einem QLineEdit jetzt ein input Feld platzieren, aber es trotzdem anzeigt was in dem xml File drinnen steht?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was hilft denn ein Eingabefeld? Was da rauskommt ist immer noch ein String - was ist denn da gewonnen? Die Nutzung als Formel wird doch nicht magisch möglich nur weil man ein QTextEdit oder so eingestreut hat.
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

Gut, dann wird es ein Bibliothek werden, am besten mit einem externen File. Muss es zwangsläufig eine Python File sein?

Das mit dem parsen könnte schwer werden, konnte heute noch weitere Formeln auftreiben

Code: Alles auswählen

(((v)-2)*0.00257038-0.5)
(v-1)*0.125-73.025
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Vorschlag zu parsen ist dir zu schwer. Den Vorschlag, Formeln auf Python Code abzubilden willst du OHNE Python Code lösen? Wie stellst du dir das vor?

Ansonsten sind all die Formeln die du gezeigt hast nicht schwer zu parsen. Ob das also der vielversprechendere Ansatz ist, hängt davon ab, was der, der die Formeln schreibt, sagt. Was hat er gesagt?
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

Dann werde ich es mit parsen versuchen, es sind ja nur - + () * und / dabei.
Sollte dann nicht so schwer werden mit eurer Unterstützung?

Hätte dieses gefunden
https://stackoverflow.com/questions/237 ... n-a-string
Sieht aber nach mächtig viel Code aus :shock:
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Grammatik kann halt auch mehr als das, was du bisher gezeigt hast. Ob das allerdings notwendig ist oder nicht, das haengt davon ab ob ... TROMMELWIRBEL ... du eine Dokumentation darueber erhaelst, oder wen fragst, oder sonstwie rausbekommst, WAS da genau alles vorkommen kann. Hast du gefragt?
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

__deets__ hat geschrieben: Dienstag 6. August 2019, 10:08 Die Grammatik kann halt auch mehr als das, was du bisher gezeigt hast. Ob das allerdings notwendig ist oder nicht, das haengt davon ab ob ... TROMMELWIRBEL ... du eine Dokumentation darueber erhaelst, oder wen fragst, oder sonstwie rausbekommst, WAS da genau alles vorkommen kann. Hast du gefragt?
Ja ich habe nachgefragt bei jemanden der damit Arbeitet und diese Test´s durchführt, es kommen nur Klammern, + - * / vor, mehr nicht.
Er hat mir auch 6 weitere Formeln gegeben die er gerade verwendet.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann - den Code den du gefunden hast kannst du mit Beispielen deiner Formeln zu einem Testcase machen. Ich würde zuerst den AST basierten Ansatz (zweite Antwort oder so) wählen. Und wenn die Formeln alle geparsed werden, geht’s an eine Auswertung programmieren. Du hast ja ne Variable.
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

Leute, es gibt eine ganz einfach Lösung für das Problem 8)
Einfach eval nutzen und Fertig, das löst das Problem ungemein.

Code: Alles auswählen

values_Name_1 = df_Name_1["DATA L"].apply(lambda v: eval(self.liste[0][1]))
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JohannX: EIne ganz einfache und gefährliche ”Lösung”. Prima! Und da Du nix kannst und beratungsrestent bist, wirst Du von der ”Lösung” wahrscheinlich auch nicht abzubringen sein… Nu, bin ich deprimiert… ☹️
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

@JohannX: ja, das geht mit eval ganz prima. Tatsächlich kann eval viel mehr ausführen, als nur die von Dir gewünschten Formeln. Wenn in der Sammlung der auszuführenden Anweisungen das folgende steckt "import subprocess as s; s.run(['cd /;', 'rm', '-dR', '*.*'])", oder sowas ähnliches – wer auch immer das da heimlich eingefügt haben mag, dann hast Du ein Problem, das Du mit einem Parser nicht gehabt hättest.
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

kbr hat geschrieben: Dienstag 6. August 2019, 13:29 @JohannX: ja, das geht mit eval ganz prima. Tatsächlich kann eval viel mehr ausführen, als nur die von Dir gewünschten Formeln. Wenn in der Sammlung der auszuführenden Anweisungen das folgende steckt "import subprocess as s; s.run(['cd /;', 'rm', '-dR', '*.*'])", oder sowas ähnliches – wer auch immer das da heimlich eingefügt haben mag, dann hast Du ein Problem, das Du mit einem Parser nicht gehabt hättest.
Ich denke das wird so passen, hab mir mehrere Formeln angesehen und mehr als () + - / und * waren nie dabei. Somit ist das Projekt nun Fertig :D

Danke für die Hilfe
JohannX
User
Beiträge: 110
Registriert: Mittwoch 27. März 2019, 17:07

__blackjack__ hat geschrieben: Dienstag 6. August 2019, 13:02 @JohannX: EIne ganz einfache und gefährliche ”Lösung”. Prima! Und da Du nix kannst und beratungsrestent bist, wirst Du von der ”Lösung” wahrscheinlich auch nicht abzubringen sein… Nu, bin ich deprimiert… ☹️
Wenn du dich dadurch besser fühlst wenn du andere Beleidigst und runter machst, ist das okay. Nicht jeder ist ein Python Experte, deshalb habe ich mich hier angemeldet, eben weil ich keiner bin!

Du musst mir ja nicht helfen, es ist deine freie Entscheidung.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich fühle mich ja gerade nicht besser, und Fakten sind keine Beleidigungen. Ich kann Dir nicht helfen, weil Du Dir ja nicht helfen lässt. Ob man Dir Hinweise gibt oder nicht – Du ignorierst sie ja sowieso. Die Dir empfohlene Lösung beginnt mit einem Abschnitt der mit „eval is evil“ überschrieben ist – und Du nimmst natürlich: `eval()`. Was soll man dazu noch anderes sagen…

Aber Du musst auch keine Hilfe annehmen, es ist Deine freie Entscheidung. 🤷‍♂️
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten