Hilfe zu abgewandeltem Skript

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Don83
User
Beiträge: 1
Registriert: Mittwoch 29. Januar 2014, 16:17

Hallo liebe Python community,

gleich einmal vorweg. Ich beherrsche leider kein Python (aber andere Sprachen wie java oder Perl) muss allerdings ein Pythonskript anpassen.
Für mich sah das jetzt auf anhieb recht einfach aus, aber irgendetwas funktioniert nicht.

Hier einmal worum es geht (Ausschnitt aus dem Orginalskript):

Code: Alles auswählen

if (zeile == 0):
						if (marker == "odd"): l.append(tr_odd)
						if (marker == "even"): l.append(tr_even)
							
						if ((kategorie == "Test") or (kategorie=="Klinik")):
							anzeige = td1 %  ('<a name="plz' + c + '">',row[4],'</a>',row[3],row[2],row[1],row[6],row[7],row[8],row[9],'<a href="http://'+row[11]+ '">'+row[11]+'</a>')
						else:
							anzeige = td1 %  ('<a name="plz' + c + '">',row[3],row[2],row[1],'</a>',row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11])
						l.append(anzeige)
						zeile = zeile +1
					elif (zeile == 1):
						if ((kategorie == "Test") or (kategorie=="Klinik")):
							anzeige = td1 %  ('<a name="plz' + c + '">',row[4],'</a>',row[3],row[2],row[1],row[6],row[7],row[8],row[9],'<a href="http://'+row[11]+ '">'+row[11]+'</a>')
						else:
							anzeige = td1 %  ('<a name="plz' + c + '">',row[3],row[2],row[1],'</a>',row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11])
						l.append(anzeige)
						zeile = 0
						l.append(tr_end)
						if (marker == "odd"): marker = "even"
						else:	marker = "odd"
					else:
						l.append("  ")


Im Urpsrungsskript wird eine HTML Tabelle erstellt, die sowohl beim Auftreten der Kategorie "Test" als auch "Klinik" Adressen in echte (HTML) Links umwandelt. Dies soll aber nur für die Spalten der Kategorie "Test" passieren. (Es gibt auch noch andere Kategorien).

Ich hatte mir das jetzt wie folgend gedacht:

Code: Alles auswählen

if (zeile == 0):
						if (marker == "odd"): l.append(tr_odd)
						if (marker == "even"): l.append(tr_even)
							
						if ((kategorie == "Test") or (kategorie=="Klinik")):
							if (kategorie == "Test"):
								anzeige = td1 %  ('<a name="plz' + c + '">',row[4],'</a>',row[3],row[2],row[1],row[6],row[7],row[8],row[9],'<a href="http://'+row[11]+ '">'+row[11]+'</a>')
							else:
								anzeige = td1 %  ('<a name="plz' + c + '">',row[4],'</a>',row[3],row[2],row[1],row[6],row[7],row[8],row[9],row[11])
						else:
							anzeige = td1 %  ('<a name="plz' + c + '">',row[3],row[2],row[1],'</a>',row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11])
						l.append(anzeige)
						zeile = zeile +1
					elif (zeile == 1):
						if ((kategorie == "Test") or (kategorie=="Klinik")):
							if (kategorie == "Test"):
								anzeige = td1 %  ('<a name="plz' + c + '">',row[4],'</a>',row[3],row[2],row[1],row[6],row[7],row[8],row[9],'<a href="http://'+row[11]+ '">'+row[11]+'</a>')
							else:
								anzeige = td1 %  ('<a name="plz' + c + '">',row[4],'</a>',row[3],row[2],row[1],row[6],row[7],row[8],row[9],row[11])
						else:
							anzeige = td1 %  ('<a name="plz' + c + '">',row[3],row[2],row[1],'</a>',row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11])
						l.append(anzeige)
						zeile = 0
						l.append(tr_end)
						if (marker == "odd"): marker = "even"
						else:	marker = "odd"
					else:
						l.append("  ")
Wenn wir also die Kategorie Test oder Klinik haben, wird etwas im Vergleich zu den anderen Kategorien anders gemacht (wie bisher). Mit einer weiteren If-Abfrage wird aber wirklich nur bei der Kategorie Test der Link gesetzt. Das Ganze funktioniert nun aber nicht. Fehlermeldungen habe ich leider keine, da ich das Skript direkt auf einen Server hochlade und entweder es funktioniert oder eben nicht. Ich habe gelesen man muss in Python auf "Einrückungen" achten, was ich aber eigentlich getan habe. Habe ich irgendetwas syntaktisch falsch gemacht? Vom Prinzip her müsste es doch klappen!? Irgendetwas stimmt also in den Bereichen 6-9 bzw. 16-19 (dort wo ich eben Änderungen vorgenommen habe) nicht...
BlackJack

@Don83: Das Original ist ja schon gruselig und redundant. Deine Fallunterscheidungen mit kopieren, einfügen, und geringfügig ändern machen es nicht besser. Ich würd's wegwerfen und neu schreiben. Aber zumindest nicht noch unübersichtlicher machen. Es gibt Funktionen. Und die Fallunterscheidung sollte man an den Stellen ansetzen die sich unterscheiden und nicht so viel in den einzelnen Zweigen wiederholen.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Don83: haben die einzelnen Einträge in "row" nicht auch sinnvolle Namen? str.format kann direkt auf Listeneinträge referenzieren, ich würde also verschiedene Templatestrings erzeugen und je nach Fallunterscheidung den richtigen davon heraussuchen. Wie sieht denn td1 aus?

Code: Alles auswählen

ADRESSE1 = '<td><a name="plz{c}">{row[4]}</a>{row[3]}...</td>'
ADRESSE2 = '<td><a name="plz{c}">{row[3]}, {row[2]}, {row[1]}</a>...</td>'

td1 = ADRESSE1 if kategorie in ("Test", "Klinik") else ADRESSE2
l.append(td1.format(c=c, row=row))
Antworten