Seite 1 von 1

ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 13:09
von 5inch
Hallo Forum,
bin in letzter Zeit nicht wirklich in Python weitergekommen, da andere Projekte anstanden.
Ich hab heute eine wahrscheinlich für Euch kleine Aufgabenstellung, aber keinen blassen Schimmer, wie ich es anstellen soll.

Meine Anforderungen sollen sein einen ASCII-Text-File nach einem oder mehreren Text-Blöcken zu durchsuchen,
und diese dann mit einem neuen Text-Block (oder mehreren) aus einer oder verschiedenen ASCII-Datei stammend aus zu tauschen.

Ich hab im Forum schon mal geblättert, aber nicht das richtige nach meinem Geschmack gefunden.

Kann mir jemand von Euch einen Tipp geben, welche Methode man am besten anwenden sollte.

Vielen Dank schon mal im Voraus!

Cheers, 5inch

Re: ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 13:13
von Hyperion
Wie immer gilt: Zeig uns mal ein Beispiel!

Sind die Textblöcke fix oder stehen da spezielle "Markierungen", die nun ersetzt werden sollen?

Re: ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 13:45
von 5inch
hi Hyperion,

danke das du dir die zeit nimmst!

hier ein bischen XML Code, den ich editieren möchte:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<configuration description="Export Images (MI) – AE160 - DIKAB2 (Ueberschriebene Farben)" id="MI3" min_version="1.5.9">
	<processor id="MIProcessor">
		<file_parameter id="FILE_NAME" required="true" locked="false" visible="true" display_name="Filename" />
		<folder_parameter id="SystemRoot"  required="true" locked="true" visible="true" display_name="System root"/>
		<enum_parameter id="LOD" value="1" display_name="Level of detail"/>
		<integer_parameter id="IMAGE_WIDTH" value="640" display_name="Bildbreite" comment="Bildbreite in Pixel" min_value="0"/>
		<integer_parameter id="IMAGE_HEIGHT" value="480" display_name="Bildhöhe" comment="Bildhöhe in Pixel" min_value="0"/>
		<float_parameter id="CAMERA_FOCAL" value="1.0" display_name="Brennweite" comment="Brennweite der Kamera" min_value="0"/>
		<float_parameter id="CAMERA_APERTURE" value="1.0" display_name="Blende" comment="Blendenbreite der Kamera" min_value="0"/>
		<folder_parameter id="IMAGE_GENERATION_PATH" value="C:\" display_name="Zielverzeichnis" comment="realtiver Zielpfad für Bilddateien" visible="false" locked="true"/>
		<enum_parameter id="IMAGE_TYPE" value="PNG" display_name="Bildformat" comment="Format der zu erzeugenden Bilddatei"/>
		<enum_parameter id="LIGHTING_TYPE" value="HEADLIGHT_4_SIDES" display_name="Beleuchtungsart" comment="Einstellung der Art der Beleuchtung"/>
		<enum_parameter id="LIGHTING_QUALITY" value="1" display_name="Beleuchtungsqualität" comment="Einstellung der Qualität der Beleuchtung"/>
		<enum_parameter id="VIEW" value="ISO" display_name="Ansicht" comment="Ansicht"/>
	</processor>
	
	<mi:configuration>

		<mi:material_container id="Material_Default"/>
		<mi:material_container id="Material_Roboter">
			<mi:material colour="26,26,26" epsilon="0.1">
			"mib_illum_phong"
			(
			"diffuse"	0.0 0.0 1 ,
			"ambient"	0.0 0.0 1 ,
			"specular"	1 1 1 ,
			"exponent"	50 ,
			"mode"	4 ,
			"lights"	[ "auto_light_0_inst", "auto_light_1_inst", "auto_light_2_inst", "auto_light_3_inst", "auto_light_4_inst" ]
			)
			</mi:material>
		</mi:material_container>
		<!-- Material fuer Bauteile -->
	</mi:configuration>
	
	<view id="Study View">
		<class id="PmNode">
			<property id="caption" value="$(caption)" default="$(name)"/>
			<property id="externalID" value="$(externalID)"/>
			<property id="miMaterial" value="Material_Default"/>
		</class>
		<class id="RobcadStudy" is_root="true" is_entry="true">
			<property id="children" value="$(children)" is_child="true"/>
			<external_aspect id="ENGDATA2" value="#TuneCells\$(externalID)\EngData\engData_ver2.xml"/>
			<external_aspect id="SNAPSHOT" value="#TuneCells\$(externalID)\EngData\.appCellViews.xml"/>
		</class>
ich möchte gerne diesen Teil mit einem neuen TextBlock austauschen:

Code: Alles auswählen

<mi:configuration>

		<mi:material_container id="Material_Default"/>
		<mi:material_container id="Material_Roboter">
			<mi:material colour="26,26,26" epsilon="0.1">
			"mib_illum_phong"
			(
			"diffuse"	0.0 0.0 1 ,
			"ambient"	0.0 0.0 1 ,
			"specular"	1 1 1 ,
			"exponent"	50 ,
			"mode"	4 ,
			"lights"	[ "auto_light_0_inst", "auto_light_1_inst", "auto_light_2_inst", "auto_light_3_inst", "auto_light_4_inst" ]
			)
			</mi:material>
		</mi:material_container>
kannst Du mir bitte einen Tipp geben, wie man da ran geht?

merci,

sG, 5inch

Re: ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 13:47
von 5inch
aehm soory falscher Block, ich wollte natürlich bis hier hin tauschen:

Code: Alles auswählen

 <mi:configuration>

      <mi:material_container id="Material_Default"/>
      <mi:material_container id="Material_Roboter">
         <mi:material colour="26,26,26" epsilon="0.1">
         "mib_illum_phong"
         (
         "diffuse"   0.0 0.0 1 ,
         "ambient"   0.0 0.0 1 ,
         "specular"   1 1 1 ,
         "exponent"   50 ,
         "mode"   4 ,
         "lights"   [ "auto_light_0_inst", "auto_light_1_inst", "auto_light_2_inst", "auto_light_3_inst", "auto_light_4_inst" ]
         )
         </mi:material>
      </mi:material_container>
      <!-- Material fuer Bauteile -->
   </mi:configuration>

Re: ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 14:03
von BlackJack
@5inch: XML-Dateien sind keine Textdateien. Wenn man die als solche behandelt wird man früher oder später auf Probleme stossen. XML-Daten verarbeitet man mit Werkzeugen die XML verstehen.

Re: ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 14:11
von 5inch
hi BlackJack,

ok, verstehe, und wie mach ich das am besten?

:K

ich hab gesehen, da gibts in Python bestimmte Tools (LXML, usw...)
Stimmt das, sollte man so etwas nehmen?

sG, 5inch

Re: ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 14:16
von Hyperion
Du kannst das vermutlich auch mit dem "ElementTree"-Modul aus der Standard Lib lösen; `lxml` bietet jedoch mehr, z.B. XPath uvm.

Wenn es keine Umstände macht, würde ich mir einfach mal `lxml` installieren und mich damit zum Ziel tasten :-)

Re: ASCII-Text-Blöcke suchen und austauschen

Verfasst: Mittwoch 30. Mai 2012, 22:04
von 5inch
hi Hyperion,

danke für den Tipp, werd ich mir mal anschauen.
Meld mich wieder sobald ich etwas Code zu zeigen habe.

Merci,

sG, 5inch

:wink: