abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
Programmierung
Alles über Programmierung in GDL und Python

datenmüll aus autoskripten entfernen

georgweber
Participant
nervt euch auch der datenmüll in den von archicad automatisch erstellen gdl objekten? nachdem ich des öfteren aus versehen von hand schon mal zuviel gelöscht hatte, habe ich mir ein excel-macro geschrieben, was das gezielte löschen für mich automatisch erledigt.

hier kann eine exeldatei heruntergeladen werden. mit dieser datei kann man das löschen auch schrittweiseausführen, und es gibt schon vorbereitete schaltflächen.

<img src="http://www.hiwe.de/georg/forum/datenmuell.gif" alt=" - " />

alternativ dazu kann man bei excel auch ein neues leeres macro erzeugen und das folgende script zwischen die ausdrücke SUB NAME und END SUB kopieren. in den einzelnen absätzen wir mit Criteria1:="=...*" nach den jeweiligen zeilenanfängen gesucht und gelöscht. nach bedarf können einzelne absätze gelöscht werden.
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif">
''' formatiere Zellen als Text und Einfügen aus Zwischenablage

Columns("A:B").Select
Selection.NumberFormat = "@"
Range("A1").Select
ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:= _
False

''' Fange an mit Daten Filter und Löschen

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=!!*", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=GLOB_*", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=WALL_*", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=SYMB_*", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=WIDO_*", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=SET MATERIAL*", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=PEN*", Operator:=xlAnd
Cells.Select
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=RESOL*", Operator:=xlAnd
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=BODY*", Operator:=xlAnd
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=!*", Operator:=xlAnd
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=MODEL Solid*", Operator:=xlAnd
Selection.Delete Shift:=xlUp

Rows("1:1").Select
Selection.Insert Shift:=xlDown
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=!*", Operator:=xlAnd
Selection.Delete Shift:=xlUp

''''Kopiere nur die Zellen mit Inhalt in die Zwischenablage ...

Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="<>"
Selection.Copy


[ 02-12-2002, 07:34: Beitrag editiert von: georg ]
ArchiCAD 4.5 bis 27 GER FULL | Worksation: Win10 | BIM Server: Win Server 2019 | Mönchengladbach
7 ANTWORTEN 7
andreaszeike
Newcomer
vielleicht mach ich ja was falsch, aber bei mir löscht das makro auch sämtliche Koordinaten...

probiers mal mit </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> ! Document name: tisch
!
!
! Name : tisch.GSM
! Datum : Dienstag, 3. Dezember 2002
! Version : 7.00
! Geschrieben von ArchiCAD
!

MULX A/ 3.418837
MULY B/ 1.560388
MULZ ZZYZX/ 0.825
ADD 0.459557, 0.0, 0.0
SET MATERIAL 0
BODY -1
MODEL SOLID
RESOL 36
GLOB_SCRIPT_TYPE = 3
GLOB_CONTEXT = 3
GLOB_SCALE = 100
GLOB_NORTH_DIR = 90.0
GLOB_DRAWING_BGD_PEN = 94
GLOB_FRAME_NR = -1
GLOB_EYEPOS_X = 7.05666
GLOB_EYEPOS_Y = -4.66714
GLOB_EYEPOS_Z = 15.8381
GLOB_TARGPOS_X = -0.198376
GLOB_TARGPOS_Y = 7.7205
GLOB_TARGPOS_Z = 0.877596
GLOB_SUN_AZIMUTH = 79.5923
GLOB_SUN_ALTITUDE = 35.0
BODY -1
BODY -1
BODY -1
BODY -1
BODY -1
BODY -1
GLOB_HSTORY_HEIGHT = 2.9
!!Decke-001
PEN 2
GLOB_LAYER = "Decken"
GLOB_ID = "Decke-001"
GLOB_INTID = 3
BODY -1
cPRISM_ "Kunststein Beton, dunkel", "Verputz, weiß", "Verputz, weiß",
5, 0.8,
0.0, 0.0, 15,
2.0, 0.0, 15,
2.0, 1.0, 15,
0.0, 1.0, 15,
0.0, 0.0, -1
BODY -1
!!Decke-001
ADDZ 0.8
GLOB_INTID = 4
BODY -1
cPRISM_ "Kunststein Beton, dunkel", "Verputz, weiß", "Verputz, weiß",
5, 0.025,
-0.459557, 1.560388, 15,
2.95928, 1.560388, 15,
2.95928, 0.286704, 15,
-0.459557, 0.286704, 15,
-0.459557, 1.560388, -1
BODY -1
DEL 1
Da hat er mir doch glatt
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> MULX A/ 3.418837
MULY B/ 1.560388
MULZ ZZYZX/ 0.825
ADD 0.459557, 0.0, 0.0
cPRISM_ "Kunststein Beton, dunkel", "Verputz, weiß", "Verputz, weiß",
ADDZ 0.8
cPRISM_ "Kunststein Beton, dunkel", "Verputz, weiß", "Verputz, weiß",
DEL 1

draus gemacht... 🙄

ansonsten - tolle Idee!
Gruß, az
zzyzx
Newcomer
bei mir läufts einwandfrei!
--- vielleicht Versionsabhängig: Excel2000 unter Win2000
super Idee
georgweber
Participant
hallo andreas, muss wohl an der version liegen.

mit deinen daten kommt bei mir folgendes raus ...

MULX A/ 3.418837
MULY B/ 1.560388
MULZ ZZYZX/ 0.825
ADD 0.459557, 0.0, 0.0
cPRISM_ "Kunststein Beton, dunkel", "Verputz, weiß", "Verputz, weiß",
5, 0.8,
0.0, 0.0, 15,
2.0, 0.0, 15,
2.0, 1.0, 15,
0.0, 1.0, 15,
0.0, 0.0, -1
ADDZ 0.8
cPRISM_ "Kunststein Beton, dunkel", "Verputz, weiß", "Verputz, weiß",
5, 0.025,
-0.459557, 1.560388, 15,
2.95928, 1.560388, 15,
2.95928, 0.286704, 15,
-0.459557, 0.286704, 15,
-0.459557, 1.560388, -1
DEL 1

aber im prinzip kannst du auch ganz schnell selber in exel ein makro erstellen, besser geht das mit dem record knopf unter extras makros. einfach die aktion aufnehmen.
die aktion, die du durchführen musst ist
spalten A und B als Text formatieren (damit exel -- die werte auf garkeinen fall als zahlen interpretiert)
1. aus zwischenablage in A1 einfügen
2. neue zeile darüber einfügen
3. alles markieren und autofilter wählen
4. in spalte A dein löschkriterium unter benutzerdefiniert wählen, und alles was dann angezeit wird löschen.
5. schritt 2-4 solange wiederholen bis aller müll weg ist.
6. schritt 2-4 letztmalig ausführen mit dem suchkriterium nicht leere. dann kopieren, dann ist alles in der zwischenablage.
aufnahme beende. das makro jederzeit am besten mit einem tastenkürzel wieder aufgerufen werden.

[ 04-12-2002, 10:01: Beitrag editiert von: georg ]
ArchiCAD 4.5 bis 27 GER FULL | Worksation: Win10 | BIM Server: Win Server 2019 | Mönchengladbach
zzyzx
Newcomer
vermutlich könnte man auf diese weise ein ziemlich leistungsstarkes Tool basteln, wenn man nur wüsste, wie 🙄
Im 2D Skript tauchen etwas andere unnötige Sachen auf, etwa hotspot2 in Massen, oder auch set fill;
das alles hab ich rausbekommen, wie mans entfernt (Makro bearbeiten, einen Abschnitt kopieren, umbenennen und den entsprechenden Befehl austauschen (statt set material eben set fill...),
aber ein poly_2b in ein cprism_ umzubauen ist eben doch schwieriger: dazu müsste man die Koordinaten wohl nach dem Komma separieren und in einzelne Zellen packen... vielleicht hat ja jemand eine Idee, wie das gehen könnte??? :verzweifelt: :winken:
georgweber
Participant
hallo zzyzx ...

poly_2b in ein cprism_ umzubauen lasse ich vorher durch ein word makro erledigen, bevor ich den datenmüll auf schon beschriebenen weg anschließend in exel entfernen lasse.

hier der makro text ...
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "POLY2_B"
.Replacement.Text = "CPRISM_ mat1, mat2, mat3,^p"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "POLY2_B"
.Replacement.Text = "CPRISM_ mat1, mat2, mat3,^p"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = ", 1, "
.Replacement.Text = ", 15, "
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll zum vorgehen...
bei word2000 neues makro erstellen und den text zwischen
sub makroname und end sub
kopieren. fertig.

einziger wehrmutstropfen ...
von hand muß man anschließend noch in der jeweils zweiten zeile die 2d angaben für stift und hintergrundstift löschen oder ein ! davorsetzen.

beispiel ...
aus ...
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> POLY2_B 8, 2, 94, 0,
-0.0, 0.0, 1,
3.0, 0.0, 1,
3.0, 1.0, 1,
2.0, 1.0, 900,
0.0, 90.0, 4001,
2.0, 2.0, 1,
-0.0, 2.0, 1,
-0.0, 0.0, -1
wird ...
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">CPRISM_ mat1, mat2, mat3,
8, 2, ! 94, 0,
-0.0, 0.0, 15,
3.0, 0.0, 15,
3.0, 1.0, 15,
2.0, 1.0, 900,
0.0, 90.0, 4001,
2.0, 2.0, 15,
-0.0, 2.0, 15,
-0.0, 0.0, -1
das ausrufezeichen in der zweiten zeile muß von hand gestzt werden.

[ 09-12-2002, 13:17: Beitrag editiert von: georg ]
ArchiCAD 4.5 bis 27 GER FULL | Worksation: Win10 | BIM Server: Win Server 2019 | Mönchengladbach
zzyzx
Newcomer
danke, werd ich mal probieren, diese Makrogeschichten, scheint eine ganz brauchbare Sache zu sein.
Man kann die beschriebene Funktion aber auch einfach im ArchiCAD mit dem Suchen und Ersetzten Dialog machen (hab ich zwischendurch noch rausgefunden), wichtig ist dass man nicht "1" durch "15" ersetzt sondern so wie im Makro ", 1," durch ", 15,"
Aber auf diese Weise kann man diese Pfaderstellung, die Andreas mal irgendwo beschrieben hatte, nicht hinbekommen (er hatte da glaub´ich, die Tabellen in Word genommen; ideal wäre so eine all-in-one-Excel-Lösung
andreaszeike
Newcomer
ich habe die Excel-datei zu einer Vorlage gemacht (.xlt) - jetzt funzt sie!

Wirklich eine hervorragende Idee! Vielen Dank!!

@zzyzx:
das mit der Pfaderstellung für TUBE hätte ich auch gern mit Excel gemacht, aber ich habe es nicht geschafft, die Kommata zu erhalten, wenn der Text auf Spalten verteilt wird. Bestimmt gibt´s da einen Trick...

übrigens war das hier: http://www.a-null.com/ubb/ultimatebb.php?ubb=get_topic;f=6;t=000084

Gruß, az

[ 10-12-2002, 21:18: Beitrag editiert von: Andreas Zeike ]