You are not logged in.

  • Login

1

Monday, May 25th 2009, 4:14pm

tool zum ersetzen von alten werte durch neue

Hallo zusammen,

ich bin damit beauftragt worden ein tool zu schreiben das bestimmte werde in dateien in neue werte wandelt.
das programm an sich ist kein problem. leider habe ich bis jetzt noch nie mit xml gearbeitet.

stelle ich mir das so richtig vor:

XML Code

1
2
3
4
5
6
<root>
<alter_wert>
</alter_wert>
<neuer_wert>
</neuer_wert>
</root>


jetzt hätte ich als erstes alle alten und neuen werte in einer liste gespeichert. dann die datei durchsucht und jeden alten wert durch den neuen ersetzt...

thx, truespin

2

Monday, May 25th 2009, 8:12pm

Hi,
verstehe ich das richtig, dass die XML Datei zur Konfiguration des Programmes dient?
Dann solltest du noch einen Knoten drumherum machen:

XML Code

1
2
3
4
5
6
7
8
9
10
<root>
	<node>
		<alter_wert>a</alter_wert>
		<neuer_wert>b</neuer_wert>
	</node>
	<node>
		<alter_wert>a</alter_wert>
		<neuer_wert>b</neuer_wert>
	</node>
</root>


Oder willst du Inhalte innerhalb von XML Dateien ersetzen?
Mit welcher Sprache arbeitest du denn?

Ansonsten sehe ich keine Probleme bei der Realisierung.

3

Tuesday, May 26th 2009, 8:19am

hallo,

ich hab mich gestern nochmal ne bisschen umgesehen.
bin wohl etwas schnell an die sache ran gegangen.

jetzt würde ich das ganze so angehen:

mit c# xml serialicer erstelle ich mir eine xml-datei in der die neuen und alten werte wie d0nut beschrieben hat abgelegt werden.

als nächsten schritt muss ich diese werte wieder in z.B. einer Liste speicher um sie im weiteren verlauf dese programms verwenden zu können... sehe ich das richtig?

nun muss ich die zu durchsuchende datei auf die entsprechenden alten werte durchsuchen und gegen die neuen ersetzten.

ich hoffe mal ich hab nicht nen größeren denkfehler drin. bitte weißt mich darauf hin ;)


thx, truespin

4

Tuesday, May 26th 2009, 5:43pm

ja genau. Dein Programm arbeitet nur mit den Listen.
Die XML wird nur beim beim Start des Programms geladen und beim ändern der Liste wieder aktualisiert.
Vielleicht ist es für die C# Nutzer noch interessant zu wissen wie du die Ersetzungen durchführst.

in php mache ich das immer über ein assoziatives array:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
$x = array(
	'search' => 'replace',
	'a' => 'b'
);
 
$old_content = file_get_contents('filename');
$new_content = str_replace(
	array_keys($x),
	array_values($x),
	$old_file
);
 
fwrite(.., $new_content)

5

Wednesday, May 27th 2009, 6:41am

guten morgen zusammen,

hmm ja das wäre für mich auch interessant ;)

bin mir da selbst noch nicht so sicher. ich hätte wohl angefangen den gazen text einzulesen und für jedes "wort" meine liste durchlaufen muss. finde ich eine übereinstimmung, muss ich diese dann ersetzen...

das hört sich für mich sehr unperformat an. ich bin für jeden vorschlag offen!


thx, truespin

6

Wednesday, June 3rd 2009, 9:10am

guten morgen zusammen,

hier nur nochmal ne kleine zusammenfassung wie ich das mit der xml datei gelöst habe.

das xml file indem die alten und neuen werte gespeichert werden sieht etwa so aus:

XML Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8" ?> 
- <XmlContainer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <Values>
- <ValueContainer_t>
  <NewValue>bla</NewValue> 
  <OldValue>blub</OldValue> 
  </ValueContainer_t>
- <ValueContainer_t>
  <NewValue>bla</NewValue> 
  <OldValue>blub</OldValue> 
  </ValueContainer_t>
- <ValueContainer_t>
  <NewValue>bla</NewValue> 
  <OldValue>blub</OldValue> 
  </ValueContainer_t>
- <ValueContainer_t>
...


mit dem c# serializer lese ich die werte aus und speichere sie in zwei listen (lOldValue, lNewValue) ab.

nun wird die datei inder die werte ersetzt werden sollen mit dem textreader eingelesen und in einer string variable abgelegt.
mit der .replace funktion wird nun der string nach den alten werten durchsucht und durch die neuen ersetzt.

C# Quellcode

1
2
3
4
foreach (ValueContainer_t oCurValue in oXmlContainter)
                {
                    sNewContent = sNewContent.Replace(oCurValue.OldValue, oCurValue.NewValue);
                }



danke für die hilfe d0nut.


thx, truespin

Social bookmarks