Seite 1 von 1

Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 12:09
von Neo12345
Hallo,

bin noch nicht ganz vertraut mit Python und hänge gerade an einem Problem. Ich möchte eine Datei einlesen in der folgende Zeile steht:

#define PLFTALTH_DAQ {0xFFFFFFFF,0xFF,0xFF,0xFF,0,0x400167AE,2}

ich würde gerne auf die Adresse "0x400167AE" zugreifen.
Zu erst die Zeile aufsplitten. Problem ist, das alles in den {} als ein Parameter interpretiert wird.
Mit zielpar = list(paramter[2]) wollte ich eine Liste erstellen, sodass ich auf jeden Wert zugreifen kann.
Allerdings greife ich nur auf die einzelnen Strings zu. Kann mir jemand erklären, was ich ändern muss, um auf die Werte zuzugreifen?

Code: Alles auswählen

import fileinput
from tkinter import *
from tkinter import filedialog

root = Tk()

file_path = filedialog.askopenfilename(filetypes = (("daqlist", "*.h"), ("All files", "*.*")))

for line in fileinput.FileInput(file_path, inplace=1):
    if "#define PLFTALTH_DAQ" in line:
       parameter = line.split()
       print(parameter[2])
       zielpar = list(parameter[2])
       print(zielpar[0])

Re: Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 12:31
von Jankie
Ich würde da mit RegEx ran gehen und einfach den Text zwischen zwei geschweiften Klammern suchen und dann mit Split am Komma trennen.

Re: Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 12:37
von Neo12345
@Jankie Die Variable vorne PLFTALTH_DAQ ist statisch und verändert sich nicht.
Die Adresse kann sich schon mal verändern. Deswegen würde ich gerne auf die Stelle zugreifen. Bestenfalls eine Liste der Parameter erstellen, die in den geschweiften Klammer sind.
Aber irgendwie schaffe ich es nur auf den String zuzugreifen. Mit der Lösung von String [29:39] bin ich nicht zufrieden. Das muss doch einfacher gehen, aber leider komme ich hier gerade nicht weiter...

Re: Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 12:50
von Sirius3
@Neo12345: Jankie hat doch schon geschrieben, dass man das einfach mit einem regulären Ausdruck machen kann. Bedeutet aber, dass die Zeile auch so aussehen muß, was ja ein sehr eingeschränktes Subset von C-Parser mit Macro-Preparser ist.

Re: Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 12:53
von Jankie
Wie gegsagt, mit RexEx kannst du dir den gesamten Inhalt der zwischen den beiden geschweiften Klammern steht zurückgeben lassen. Das wäre in deinem Beispiel "0xFFFFFFFF,0xFF,0xFF,0xFF,0,0x400167AE,2" da dann am Komma Splitten und du hast folgende Liste ['0xFFFFFFFF', '0xFF', '0xFF', '0xFF', '0', '0x400167AE', '2']. Das Element an der Stelle 5 ist dein gewünschter Wert.

Re: Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 13:02
von Neo12345
Danke euch beiden!! :D So einfach ist das also. Stand echt auf dem Schlauch.

Re: Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 13:04
von /me
Dann würde ich auch alles mit dem regulären Ausdruck direkt erledigen

Code: Alles auswählen

r'#define .*? {(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?)}'
Und wenn man möchte kann man den ersten Text nach dem define natürlich auch noch einfangen.

Re: Zugriff auf Parameter

Verfasst: Dienstag 5. Mai 2020, 14:48
von Sirius3
@/me: vielleicht möchte man auch nicht auf eine Fixe Anzahl an Elementen festgelegt sein (naja, durch das .*? landen alle weiteren Elemente in der letzten Gruppe). Daher alles in geschweiften Klammern in eine Gruppe und in Python per split aufspalten.