Fast schon programmieren

Xyroon

dö_öb
Mitarbeiter
Administrator
TS Admin
10. Februar 2008
3.263
306
36
Baselland
Hallo zusamen. ich möchte mit XML rum basteln und ich hatte fas schon erfolg und Dan hat es mich wider zukür geworfen.
das Problem ist ich kam nicht einfach suchen und ersetze, da sich die Formatierung beim Export dauernd ändert

so siet die basis aus:
<layerview name="AID_1">
<data-layer transparency="0" hatch-pitch="4" transparency-3d="0" display="true" selectable="true" style="no width" hatch-angle="45" style-3d="width" color="#fac527"/>
<drawing-layer transparency="0" hatch-pitch="4" display="true" selectable="true" style="width" hatch-angle="45" color="#ffffff"/>
</layerview>
Um das ganze zu editieren benutze ich visual studio cod
mit hilfe eines kolegen war ich so weit das er mir ein String(oder wie heist das?) zusamen gesetzt hat

(<layerview name="AID_1">\n\s*<data-layer color=)".*?"( style=)".*?"( hatch-pitch=)".*?"(?:( display=".*?")|)( style-3d=)".*?"(?:( selectable=".*?")|)( transparency=)".*?"( transparency-3d=)".*?"( hatch-angle=)".*?"(\/>\n\s*<drawing-layer color=)".*?"( style=)".*?"( hatch-pitch=)".*?"(?:( display=".*?" selectable=".*?" transparency=)|( transparency=))".*?"( hatch-angle=)".*?"(\/>\n\s*<\/layerview>)

$1""$2""$3""$4$5""$6$7""$8""$9""$10""$11""$12""$13$14""$15""$16

basierend darauf habe ich mir in einer Exel was gebastelt. da ich das ganze spiel für verschiedene Layer Settings machen möchte
$1"129"$2"fill"$3"4"$4"true"$5"width"$6"true"$7"50"$8"0"$9"45"$10"#ffffff"$11"width"$12"4"$13"true"$14"true"$15"0"$16"45"

Die ID dahinter ist , ich habe ein ein layer stak up mit 6000 zielen code darin kommt der layer "AID_1" 72 mal vor.
ich möchte nun die Formatierung 72 mal gleich setzen.

Aber folgende felder sollen bleiben
data-layer: display=".*?" selectable=".*?"
drawing-layer: display=".*?" selectable=".*?"

Nach dem ich einen test lauf gemacht habe habe ich festgestellt das die Formatierung nicht immer gleich ist

<layerview name="AID_2">
<data-layer color="146" style="fill" hatch-pitch="4" display="true" style-3d="width" selectable="true" transparency="0" transparency-3d="0" hatch-angle="45"/>
<drawing-layer color="#ffffff" style="width" hatch-pitch="4" display="true" selectable="true" transparency="0" hatch-angle="45"/>
</layerview>

Hinzu kommt wen der Display haken nicht gesetzt ist stet das nicht display="off" oder so, sonder es fehlt dann einfach Komplet

Nun meine frage wie würdet ihr so was angehen?
im Anhang habe ich ein verkürzte form des Problemes
 

Anhänge

  • layerview_6L_V3._vereinfacht.txt
    51 KB · Aufrufe: 436
(<layerview name="AID_1">\n\s*<data-layer color=)".*?"( style=)".*?"( hatch-pitch=)".*?"(?:( display=".*?")|)( style-3d=)".*?"(?:( selectable=".*?")|)( transparency=)".*?"( transparency-3d=)".*?"( hatch-angle=)".*?"(\/>\n\s*<drawing-layer color=)".*?"( style=)".*?"( hatch-pitch=)".*?"(?:( display=".*?" selectable=".*?" transparency=)|( transparency=))".*?"( hatch-angle=)".*?"(\/>\n\s*<\/layerview>)

$1""$2""$3""$4$5""$6$7""$8""$9""$10""$11""$12""$13$14""$15""$16

wen ich das so mache dann habe ich da dies 16 Gruppen und nach jeder Gruppe kam ich einen Inhalt einfügen.
alos ".*?" alles zwischen den gänsefüßchen ersetzen. oder wen ich nichts schriebe nach $4 was display ist. dann bleibt da der Inhalt.
Kann man auch irgend wie sagen, dass z.b. #$3(?:( display=".*?")|). das das immer die selbe Gruppe ist. auch wen es in einer anderen Reihenfolge ist?
 
ich denke was du suchst ist ein xml parser. du wirst meines erachtens nicht drum rum kommen, das xml zuerst zu parsen (in einzelteile zu zerlegen), die elemente anzupassen und dann wieder zusammen zu führen.
da musst du effektiv was schreiben, welches deine parameter berücksichtigt. und ich glaube kaum, dass excel hier das richtige dafür ist. mit php könntest du die buildt-in funktionen verwenden.
aber auf so eine menge dynamischer code wirst du mit einem regex wie von deinem kumpel vorgeschlagen wohl nicht weit kommen.
 
  • Like
Reactions: benserker
Ich kann dir nicht helfen, da ich nicht programmieren kann. Es nimmt mich trotzdem ein bisschen wunder, um was es eigentlich geht. Was ist die Absicht deines Programms? Was soll es tun?
 
Würde mich auch Wundern ^^ Programmiermässig könnte ich oder Ondi dir wohl weiterhelfen wenn nötig
 
ja noch wichtiger ist die logik dahinter. was ist dynamisch, was in jedem fall fix, sollen jeweils alle mit den selben stats ausgestattet werden welche nicht vorhanden waren usw...
 
Ok ein (wenig) wem Hintergrund Information.
LeiterPalten Layout tools sind oft Voll geparkt mit Möglichkeiten. aber nicht gerade User freundlich.

Wenn ich vomm altten Zucken Cr5000 in das neue CR8000 Converte, dann haben ichdie Möglichkeit Layer Settings zu übernehmen.
Der haken daran CR5000 aus dem Jahr 1994 Unix & PC das Heist singel core 32Bit Farben keine Transparenz oder so 3D Schnickschnack, undnicht der heutige RGB standar.
CR-8000 2011 in Japan entstanden.
CR5000.jpgcr-8000-design-force.jpg
Grund setz lich verhält es sich wie Photoshop mit Grafik ebenen
ich habe XXX ebenen zu 6 lagen Kupfer,6lagen sperzone für ruting 6lagen sperzonen für Vias......Zeichnungs ebenen....
Bei einem 6Kupfer lagen designe habe ich etwa 130 ebene.

Nun habe isch filter wie z.b. all= alles eingebender.
oder Layout A1 damit ich nur A1 und ale dazu gehörgen relevanten layer sehe.

Im alten toll wen ich nun A1 Von rot auf blau geändert habe dann ist in allen Setings A1 Blau
Im neuen toll kann ich aber bei jedem Layer Stak seting die lagen Farben unterschiedlich machen.

Da das neue toll Transparente layer suportet, könt ihr euch vorstellen das ich das nutzen weil.
An stelle von 4 Verschiedenen Hasch mustern wo die pixel so versetzt sind das es fast transparent wirkt

Jetzt habe ich aber 30 Layer stak Setings und in jedem die 130 ebenen.
Wen ich auf Layout A1 nun layer A2 Manuel hinzu schalte dann hat der je nach dem in all den 30 Staks eine andere Farbe

Die staks benutz man Primer zu definieren welche layer siecht bar und/oder Selektiere bar sind.
Aber wen nun meine ebene je nach view immer eine andere Farbe haben, bin ich verwirt welche das ist
nicht nur Farben sonder auch mal vew \\\\ muster ein anderes mal ein / / / / mustero_O

darum möchte ich in view_all Mall die Default Settings definieren und dann die Einstellungen kopieren.
aber selecton haken und view haken so sein lassen

wenn ich das dann hab kann ich schon noch individuell gestalten.
Z.B. wenn ich 6ebenen habe jede ebene 20% transparent. wen aber nur 3 ebene dann 80% transparent.
und Jedes mal wenn ich ein neues Design anlege oder Converter. überschreibt es mir die Layer Settings.
Darum möchte ich ein MTX fiel haben das ich Importieren kann.

Das ganze Spiel dann für 2L 4L 6L 8L 10L
Z0504-Polar-Zuken-1-1000.png
 
Wie im Tech Chat bereits geschrieben, hier habe ich Dir ein Script geschrieben, dass genau das machen sollte, was Du benötigst:
https://ondsen.ch/xyroon/xml.php

Einfach im Formular entsprechend ein XML hochladen. Das erste Feld mit dem Namen X bestimmt für alle Nachkömmlinge mit dem selben Namen den Master und ersetzt entsprechend die Attributes.
.
Die Grundfunktion ist eigentlich ganz simpel aufgebaut:
PHP:
    $xml_data_new = $xml_data;
    $xml_replacement_arr = array();

    foreach($xml_data['dsgn']['layerview-set-list']['layerview-set'] AS $key_lvs => $layerviewset)
    {
        foreach($layerviewset['layerview'] AS $key_lv => $layerview)
        {
            if(!array_key_exists($layerview['@attributes']['name'], $xml_replacement_arr))
            {
                // Define Master Data
                foreach($xml_replacement_all_layers AS $xml_replacement_layer)
                {
                    $xml_replacement_arr[$layerview['@attributes']['name']][$xml_replacement_layer] = $layerview[$xml_replacement_layer]['@attributes'];
                    
                    // Sort Attributes
                    ksort($xml_data_new['dsgn']['layerview-set-list']['layerview-set'][$key_lvs]['layerview'][$key_lv][$xml_replacement_layer]['@attributes']);
                }
            }
            else
            {
                // Replace Values from Master
                foreach($xml_replacement_all_layers AS $xml_replacement_layer)
                {
                    // Clear Attributes before refill
                    foreach($xml_data_new['dsgn']['layerview-set-list']['layerview-set'][$key_lvs]['layerview'][$key_lv][$xml_replacement_layer]['@attributes'] AS $attr_key => $attr_val)
                    {
                        if(!in_array($attr_key, $xml_replacement_skip_attributes))
                        {
                            unset($xml_data_new['dsgn']['layerview-set-list']['layerview-set'][$key_lvs]['layerview'][$key_lv][$xml_replacement_layer]['@attributes'][$attr_key]);
                        }
                    }
                    
                    // Refill Attributes from Master Data
                    foreach($layerview[$xml_replacement_layer]['@attributes'] AS $layer_key => $layer_val)
                    {
                        if(!in_array($layer_key, $xml_replacement_skip_attributes))
                        {
                            $xml_data_new['dsgn']['layerview-set-list']['layerview-set'][$key_lvs]['layerview'][$key_lv][$xml_replacement_layer]['@attributes'][$layer_key] = $xml_replacement_arr[$layerview['@attributes']['name']][$xml_replacement_layer][$layer_key];
                        }
                    }
                    
                    // Sort Attributes
                    ksort($xml_data_new['dsgn']['layerview-set-list']['layerview-set'][$key_lvs]['layerview'][$key_lv][$xml_replacement_layer]['@attributes']);
                }
            }
        }
    }

Input
1594941159482.png


Output :)
1594941197243.png
 
Zuletzt bearbeitet:
Fielen dank ich werde das morgen Testen. Ich hatte klare Vorstellung welche Funktion ich möchte. die Grund IDE ist ja auch nicht schwierig. aber bei der Umsetzung waren es fiel kleine Stolpersteine weil ich einfach keine Erfahrung mit so Skript habe.

Ich merke immer mehr im altag das ich Programmieren muss, um Ordnung zu Schafen. Immer wichtiger wirt,
mehr addon Software. zur Steigerung der Funktionalität.
Die Bedingung geht den Bach herunter.
 
Hir sind 2 verschiedene layerview-set select.
Beim gelben siehst du dass die nicht gleich sind. Den style hat es da nicht überschriben
Farbeien sind alle korrekt
Start.png
All_.png



Hier wie es früher ausgesehen hat
Alte_sicht.png

Alte Darstellung
alte_spersonen.png


Neu Übersichtlicher
neue_sicht.png
 
was steht denn im master style? und wie sieht es im xml beim element vorher und nachher aus? in die glaskugel schauen kann ich nicht ;)
 
Ich hab da was gefunden das nicht so ist wie ich das wollte.
Z.b.
<layerview name="WIR1" active="true">
<data-layer style-3d="fill" selectable="true" display="true" hatch-pitch="16" hatch-angle="45" style="fill" color="109" transparency="80" transparency-3d="0"/>
<drawing-layer selectable="true" display="true" hatch-pitch="16" hatch-angle="45" style="width" color="#ffffff" transparency="0"/>
</layerview>


Differenz:
<layerview name="WIR1">
<data-layer style-3d="fill" hatch-pitch="16" hatch-angle="45" style="tone9" color="109" transparency="0" transparency-3d="0"/>
<drawing-layer hatch-pitch="16" hatch-angle="45" style="width" color="#ffffff" transparency="0"/>
</layerview>

Bei einem stet active="true"> und beim anderen nicht. ich vermute mall dass die darum nicht als gleichen Layer betrachtet werden
Die Eigenschaft active="true">, soll stehen, wen es gesetzt ist, und wen nicht dann nicht.
aber die Layer setting darunter sohlen überschrieben werden

PS: wo ich noch Manuel eingreifen muss ist die erste ziele einfügen
<?xml version="1.0" encoding="UTF-8"?>
und alles kommt links bündig raus da muss ich dann die Sechspass wider einfügen
 

Similar threads

Latest posts

Members online

No members online now.
Shoutbox
  1. Yodenko Yodenko:
    besser und selber?
  2. oNdsen oNdsen:
    guet und dir?
  3. benserker benserker:
    :)
  4. oNdsen oNdsen:
    😅
  5. AemJaY AemJaY:
    badumtssss!
  6. Yodenko Yodenko:
    done
  7. corerulez corerulez:
    i mean Diablo 4 natürlich, Danke.
  8. corerulez corerulez:
    Grüezi mit de Hand, Kann öpper wo daminrecht het im TS en Diablo3 Channel mit 2-3 Teams erstelle? Wär mega nett, danke!

Discord