Seite 2 von 2

Verfasst: Sonntag 21. Februar 2010, 17:14
von LanX
Ronnie hat geschrieben:Sorry, ...
@Ronnie: schon klar....

Verfasst: Sonntag 21. Februar 2010, 17:57
von Ronnie
walha2006 hat geschrieben:... das Problem mit dem Loop ...geht einfach nicht mit dem hash/dictionary.. :roll:
Dann eben mit einem Array_of_Dictionaries:

Code: Alles auswählen

>>> config = """LOOPSTART [TEST] COUNT [5]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]
DIAG [T] SEND[22,0B]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [05]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [0D]
WAIT [5000]
LOOPEND [TEST]"""
>>> table = [dict([ (m[0], m[-1].split(',')) if re.match(r'[0-9A-F*]+,', m[-1]) else m  for m in re.findall(r'(\w+)\s*\[(.*?)\]', l)]) for l in config.split("\n")]

Verfasst: Mittwoch 24. Februar 2010, 19:57
von walha2006
Ronnie hat geschrieben:
walha2006 hat geschrieben:... das Problem mit dem Loop ...geht einfach nicht mit dem hash/dictionary.. :roll:
Dann eben mit einem Array_of_Dictionaries:

Code: Alles auswählen

>>> config = """LOOPSTART [TEST] COUNT [5]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]
DIAG [T] SEND[22,0B]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [05]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [0D]
WAIT [5000]
LOOPEND [TEST]"""
>>> table = [dict([ (m[0], m[-1].split(',')) if re.match(r'[0-9A-F*]+,', m[-1]) else m  for m in re.findall(r'(\w+)\s*\[(.*?)\]', l)]) for l in config.split("\n")]
aber Dem Inhalt von dem Datein ändert sich ,Besonders zwischen [ ] ,ändert sich ,wie kann ich die Werte markieren Z.B im COUNT[?]?
:roll:

Verfasst: Mittwoch 24. Februar 2010, 21:22
von Ronnie
walha2006 hat geschrieben:aber Dem Inhalt von dem Datein ändert sich ,Besonders zwischen [ ] ,ändert sich ,wie kann ich die Werte markieren Z.B im COUNT[?]? :roll:

Code: Alles auswählen

table[0]['COUNT']
Zugriff über die entstandene Datenstruktur?!

Verfasst: Donnerstag 25. Februar 2010, 16:52
von Ronnie
da ich vermute, dass der OP Probleme hat die verschachtelte Datenstruktur zu nutzen, hier mal ein kleines (konstruiertes) Beispiel:

Code: Alles auswählen

>>> config = """LOOPSTART [TEST] COUNT [5]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]
DIAG [T] SEND[22,0B]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [05]
DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [0D]
WAIT [5000]
LOOPEND [TEST]"""
>>> table = [dict([ (m[0], m[-1].split(',')) if re.match(r'[0-9A-F*]+,', m[-1]) else m  for m in re.findall(r'(\w+)\s*\[(.*?)\]', l)]) for l in config.split("\n")]
>>> class ComProbe:
	def __init__(self, t):
		self.name = t[0]['LOOPSTART']
		self.cnt = t[0]['COUNT']
		self.tests = t[1:-1]
	def run(self):
		for i in range(0, int(self.cnt)):
			print("running " + self.name + " for " + str(i+1) + " time:")
			for test in self.tests:
				if 'DIAG' in test:
					print("\tsending " + str(test['SEND']) + " from " + test['SOURCE'] + " to " + test['TARGET'] )
				else:
					print("\twaiting: "+ test['WAIT'])

					
>>> t = ComProbe(table)
>>> t.run()

Verfasst: Freitag 26. Februar 2010, 15:15
von walha2006
Vielen dank Ronnie ,aber ich habe verschidene Datein
(test1.txt ,test2.txt)
ich muss die Files öffnen und dann suchen ,jeder Datei hat verschiedene Werten ,zwichen [..]
hier habe ich so versucht:

Code: Alles auswählen

def leseDatei(datei): 
    d = {} 
    f = open(datei) 
    for zeile in f:
        zeile  = zeile.strip()
        wort  = zeile.strip() 
        if "LOOPSTART" in zeile: 
            key, d[key] = (s.strip() for s in zeile.split("\n")) 
        elif "key" in locals(): 
            d[key] += "\n%s" % zeile.strip() 
    f.close() 
    return d
def __init__(self, t):
        self.name = t[0]['LOOPSTART']
        self.cnt = t[0]['COUNT']
        self.tests = t[1:-1]
    def run(self):
        for i in range(0, int(self.cnt)):
            print("running " + self.name + " for " + str(i+1) + " time:")
            for test in self.tests:
                if 'DIAG' in test:
                    print("\tsending " + str(test['SEND']) + " from " + test['SOURCE'] + " to " + test['TARGET'] )
                else:
                    print("\twaiting: "+ test['WAIT'])

aber ich glaube ohne die Config ,geht nicht ,weil dem config ändert sich beim jeden Datei ..oder?
Danke Danke Danke Danke Danke Danke :lol:

Verfasst: Freitag 26. Februar 2010, 19:40
von walha2006
He! :roll:
hier versuche ich das Problem nochmal zu eklären

ich habe einfach Text Datein (test1.txt ,test2.txt...),

ZB.inhalt von test1:
(
LOOPSTART [TEST1] COUNT [2]

DIAG [T] SEND[22,3F]EXPECT[] TIMEOUT [0] SOURCE[F1] TARGET [00]

WAIT [5000]
LOOPEND [TEST]

)

Inhalt von test2:
(
LOOPSTART [TEST2] COUNT [1]

DIAG [T] SEND[20,AF]EXPECT[] TIMEOUT [0] SOURCE[F4] TARGET [10]
WAIT [1000]

LOOPEND [TEST2]

)

ich wollte :
1:Datei öffnen und finde COUNT
2:speichern dem Wert von COUNT (ZB. in test1 "2" ,in test2 "1" )
3:lesen dem Inhalt dem Schleife in Reihe (zwichen LOOPSTART und LOOPENDE ) und dem Ganze wiederholen COUNT mal ,Hier im (test1)
2 mal :

im test 1 soll die ausgabe so sein:
(
DIAG: 'T' ; SEND: '22,3F' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F1' ;TARGET:'00'; WAIT:'5000'

DIAG: 'T' ; SEND: '22,3F' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F1' ;TARGET:'00';WAIT:'5000'

)

und in test 2 soll die Ausgabe so sein
(
DIAG: 'T' ; SEND: '20,AF' EXPECT:' ';TIMEOUT:'0'; SOURCE:'F4' ;TARGET'10';WAIT:'1000'
)


:oops: :oops: :oops: :oops: