Aktuelle Zeit: 26. Sep 2020, 21:09
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: elementID_conflict - Zeilenumbruch einfügen
BeitragVerfasst: 31. Jul 2020, 08:05 
Offline
Forum Veteran

Registriert: 6. Sep 2012, 19:49
Beiträge: 554
Land: DE
Betriebsystem: Windows 7
Howdy,
bin am "pythonieren" im Embrionalstatus.

https://graphisoft.com/downloads/python

In dem Programm von GS zur Verfügung gestellten Programm "elementID_conflict.py" möchte ich einen Zeilenumbruch "\n" nach jedem Element einfügen. Ich versuchte es bereits an X Stellen, aber erfolglos.
Mann ist das kompliziert. :--)

Am vielversprechendsten schein mir Zeile 28 zu sein
propertyValuesToElementIdsDictionary[propertyValue].add(elementId)
Das "ADD" läd förmlich dazu ein, was dazuzuschreiben.

Kann mir bitte jemand helfen um "reinzukommen"

Danke & Gruß

_________________
Beste Grüße
Mario
Archicad 23, Intel(R) Xeon(R) CPU E5-1650 V4 @ 3,6 GHz, WIN 10/64bit, 32 GB RAM, NVIDIA Quadro P2000, alles was Leistung kostet deaktiviert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: elementID_conflict - Zeilenumbruch einfügen
BeitragVerfasst: 31. Jul 2020, 18:19 
Offline
Forum Veteran
Benutzeravatar

Registriert: 28. Aug 2014, 21:34
Beiträge: 949
Land: CH
Hallo Mario

Der Code von GS ist ziemlich kondensiert. Das kann man so schreiben, aber ist nicht wirklich Anfängerfreundlich.

Um die GUIDs der Elemente auf einer eigenen Zeile zu haben, musst du die Funktion "GetConflictMessage" durch die hier ersetzen:

Code:
def GetConflictMessage(elementIDPropertyValue, elementIds):
    elem_str = ("\n".join(map(str, sorted(elementIds, key=lambda id: id.guid))))
    return f"{conflictMessageParts[0]} {len(elementIds)} {conflictMessageParts[1]} '{elementIDPropertyValue}' {conflictMessageParts[2]}" + elem_str


Pass auf die korrekte Indentation auf! Python mag es nicht, wenn man Leerzeichen und Tabulatoren mixt.

############################################

Was ich hier gemacht hab, ist den letzten Teil der Konfliktmessage aus dem return abzuschneiden und in eine eigene Variable zu überführen.
Gleich schon mal einiges an Übersichtlichkeit gewonnen!

"elem_str" bekommt folgendes assigned:
(Von innen nach außen)
Sortiere die elementIds, nach ID (nicht dass das aus meiner Sicht nötig wäre, aber GS hatte das im Beispiel so drin), dann mappe jedes Item der Liste (momentan noch vom Typ "ElementID") in einen String. (Eine genaue Erklärung von map.)
Das gibt uns einen Iterator zurück, sodass wir in dieser Liste endlich jedes Item (nun vom Typ String! Das ist wichtig, sonst klappt es nicht -> dafür war "map" wichtig) mit einem Umbruch joinen können.
Bisschen Vodoo, aber man kommt da rein :)

_________________
AC 23, DE auf Win 10
»slower than ever«|Entwickler von GDL für Sublime Text
|Handgeklöppelte GDLs|Bettlektüre unter Runxels Archicad Wiki


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: elementID_conflict - Zeilenumbruch einfügen
BeitragVerfasst: 17. Aug 2020, 07:44 
Offline
Forum Veteran

Registriert: 6. Sep 2012, 19:49
Beiträge: 554
Land: DE
Betriebsystem: Windows 7
Danke Shadow!
Ich hatte Urlaub, deshalb die späte Antwort. Wenn die erste "Nachurlaubshitze" vorbei ist, werde ich es versuchen.
Beste Grüße
Mario

_________________
Beste Grüße
Mario
Archicad 23, Intel(R) Xeon(R) CPU E5-1650 V4 @ 3,6 GHz, WIN 10/64bit, 32 GB RAM, NVIDIA Quadro P2000, alles was Leistung kostet deaktiviert.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu: