rippa
Goto Top

Konfigurationsdatei editieren

Hallo zusammen !

Mein erster Beitrag hier in dem Forum (bin neues Mitglied), hoffe das mir geholfen werden kann face-smile

Also folgendes:

Ich würde gerne eine bestehende Konfigurationsdatei editieren. Funktion soll sein, daß ich nach einem bestimmten Wort in dieser Datei suche, bei Erfolg dann die diese Zeile + die 4 nächsten Zeilen lösche. Ob es nun ein Batch-Befehl ist, oder in einer anderen Sprache wäre egal, hauptsache funktioniert face-smile Hat jemand eine Idee ? Ich hatte ein bisschen mit Ursprungs Unix Befehlen (grep,sed - die es ja auch freeware für Windows gibt) rumgetestet, leider nicht zu meinem Erfolg...Obwohl ich eigentlich sicher bin, daß es auch damit funktionieren müsste...

Vielen Dank im vorraus !

Content-Key: 24138

Url: https://administrator.de/contentid/24138

Printed on: April 25, 2024 at 03:04 o'clock

Mitglied: 13100
13100 Jan 20, 2006 at 22:30:08 (UTC)
Goto Top
kommt ein wenig darauf an was du wirklich machen willst.
ob es sich nur um eine-, zweimal oder doch eher um ne
fortlaufende geschichte handelt, usw. und sofort. insofern
es nich komplett automatisch ablaufen muss, würd ich dir
am ehersten zu excel raten.

vielleicht könntest du auch einen kleinen bespielauszug
aus der config einfügen.
Member: rippa
rippa Jan 20, 2006 at 22:57:01 (UTC)
Goto Top
Vielen Dank für die schnelle Antwort !

Ok, erkläre das etwas genauer...Sinn soll dieser sein:

Wenn eine bestimmte Anwendung deinstalliert wird, soll der entsprechende Eintrag in der tnsnames.ora Datei (Oracle) gelöscht werden - Dies will ich nicht jedes Mal von Hand machen, soll automatisch ablaufen. Brauche also NUR eine ausführbare Datei, die das editieren der tnsnames.ora übernimmt.

Beispiel:

Anwendung1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = testserver1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb)
)
)
Anwendung2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = testserver2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb)
)
)

Ich deinstalliere nun Anwendung1 und möchte den kompletten Eintrag dafür (10 Zeilen löschen)...Ob der Name der Anwendung in der zu erstellenden ausführbaren Datei nun variabel Eingegeben werden kann oder fest ist, wäre egal. Mein Idee wäre einfach, dass ich nach dem Namen der Anwendung in der tnsnames.ora suche und wenn ich ihn finde dann die nächsten 10 Zeilen lösche...Nur wie mache ich das ? face-smile Für andere Vorschläge bin ich natürlich gerne offen face-smile
Mitglied: 13100
13100 Jan 21, 2006 at 00:49:52 (UTC)
Goto Top
kannst du eine script-/programmiersprache?

kannst du oracle?

für eine batchlösung, würde man wohl folgende tools benötigen:
• ein suchtool, welches nach möglichkeit zeilenweise und auch nur den anfang
auf einen begriff hin untersucht
• ein tool welches eine datei zeilenweise betrachten kann
• und/oder ein tool welches einzelne zeilen aus einer datei löschen kann.
ohne diese wird es wohl per batch nich gehen oder verdammt schwer, um nich zu sagen
ein horror.

was für scriptsprachen würden den in frage kommen, bzw. was für ein os rennt den
genau auf dem betreffenden system, bzw. rennt vielleicht auch ein webserver auf
dem teil und kommt somit eventuell auch ne weblösung (z.b. per php) in frage?
Member: rippa
rippa Jan 21, 2006 at 10:26:46 (UTC)
Goto Top
Ja, ich kann in C++, Basic Programmieren bzw. Batchdateien unter Windows anlegen kann auch jeder face-smile

Das es Oracle ist spielt ja in dem Fall nicht die Rolle, wollte nur verdeutlichen, woher ich die tnsnames.ora habe...Aber wenn es wichtig ist, kann auch mit Oracle umgehen face-smile

Diese Deinstallation der Anwendungen läuft unter Windows 2000, also muss die tnsnames.ora auch unter Windows 2000 ediert werden wo die entsprechende Deinstallation der Anwendung läuft -> Auf jeder Workstation auf der die Deinstallation läuft soll anschliessend die tnsnames.ora durch ein Script/Programm editiert werden. Also das Script/Programm wird auf der Workstation ausgeführt.

Ein Webserver läuft derzeit nicht, aber wenn Du ein Vorschlag mit php hast, würde sich da vielleicht noch was einrichten lassen face-smile Scriptsprache wie gesagt wäre egal, muss nur unter Windows 2000 laufen und die Aufgabe erfüllen face-smile
Mitglied: 13100
13100 Jan 21, 2006 at 14:02:53 (UTC)
Goto Top
mittels datenbank (die einfachste variante) :
• textfile als datenbank einlesen (eine zeile = ein datensatz mit einem feld)
• anschliessend den betreffenden datensatz suchen (am zeilenanfang)
• den betreffenden datensatz 10mal löschen
• alles wieder in ein textfile exportieren


c++:

schnapp dir ein readline() oder nen dateistream und klatsch ihn mittels
for-schleife in ein array. das array sollte hierbei am ende pro feld eine zeile
beinhalten, zur vereinfachung würde ich das feld auslassen, damit die
feldnummern equivalent zur zeilennummern is.

anschliessend checkst du jede dieser zeilen mittels for-schleife durch (immer
am anfang der zeile), ob sie dem gesuchten wort entspricht, damit scheiden
schon mal alle mit klammerbeginnenten zeilen aus und du bekommst somit
nur mehr ein ergebnis, welches sich auf die gewollten anwendungseinträge
bezieht. bei einem treffer weiss dein programm dank for-duchlaufzähler welche
zeile die gesuchte is.

anschliessend wieder mit ner for-schleife das komplette array in ein file schreiben,
bis zum gefundenen datensatz (if-abfrage). an der stelle einfach den zähler um 9
bis 10 stellen hochsetzen (löschen der ungewünschten zeilen), anschliessend noch
bis zum ende des arrays alles ins file schmeissen und aus die maus.
Member: rippa
rippa Jan 22, 2006 at 03:04:44 (UTC)
Goto Top
Vielen Dank !!!

Ich werde beides mal ausprobieren und Bericht erstatten...Falls jemand noch weitere Ideen hat, nur her damit face-smile
Member: speed
speed Jan 22, 2006 at 18:32:37 (UTC)
Goto Top
Hier noch ein Ansatz ohne Bezug auf eine konkrete Programmiersprache:

- öffnen der Datei
- zeilenweises Suchen nach dem Anwendungsnamen per Schleifenbefehl (jede Zeile hat ja am Ende einen Zeilenumbruch) und dabei Zählen der selben per Variable z.B. AnzZeilen = AnzZeilen + 1
- wenn gefunden, löschen der gewünschten Anzahl folgender Zeilen per Schleife oder direkt z.B. von AnzZeilen bis AnzZeilen + 10
- speichern der Datei