OS2.org Site Index - Feedback - Impressum
Sprachauswahl / Choose your Language News Software Hardware Projekte Forum Tipps Links Verschiedenes
Editorial Diskussion HelpDesk Umfrage
[Forum]
in nach (Erweiterte Suche)
[Forum]
( Archiv ) ( Neues Thema )

( Zeige die Threadübersicht ) ( Zur Startübersicht )
07.11.2001
Suchen und Ersetzen per REXX (von: Micha, 21:48:50) ^
Hallo zusammen !

Als unregelmäßiger Leser dieses Forums benötige ich dringend Hilfe:

Ich brauche ein Tool, mit dem ich einen bestimmten Eintrag in der CONFIG.SYS suche und dann durch einen anderen ersetze. Ich möchte dieses Tool im Netzwerk über eine PROFILE.CMD einsetzen (LAN Server 4.0), ohne daß der Anmelder etwas davon mitkriegt.

Dankbar für Hinweise

Micha
[ Leser: 96 ]

eine Aufgabe für Cube? (von: Armin, 22:37:41)
Dafür gibt's ein wunderbares REXX-Script namens cube.cmd. Zu beziehen zB von:
ftp://ftp.leo.org/pub/comp/os/os2/leo/rexx/cube.zip

Cube ist ein ausserordentlich mächtiges Werkzeug, das jedoch etwas Literaturstudium erfordert. In der Anleitung sind glücklicherweise ein paar gute Beispiele drin.

08.11.2001
Re: Suchen und Ersetzen per REXX (von: Cornelis, 07:36:01)
Mit REXX "zu Fuss": CONFIG.SYS zeilenweise einlesen, checken ob's der richtige ist und ggf. die Zeile ersetzen, wieder herausschreiben in eine temporäre Datei. Dann am Ende CONFIG.SYS in irgendeine Backup-Version umbenennen (oder löschen - würde ich aber nicht empfehlen!!!) und temp. Datei in CONFIG.SYS umbenennen.

Scheint kompliziert, aber geht nicht anders, ausser dein neuer Eintrag wäre auf's Byte genau gleich lang wie der zu ersetzende: Dann könnte man auch einen Weg finden, sozusagen die existierende CONFIG.SYS zu "patchen".

Re: Suchen und Ersetzen per REXX (von: Peter W., 13:44:53)
/*hier geht's los*/
file1='c:config.sys'
file2='c:config.neu'
'copy config.sys config.bac' /*Sicher.kopie!*/

x=0
DO WHILE lines(file1)
x = x + 1
line.x = LINEIN(file1)
IF line.x = 'FILES=120'
THEN line.x = 'FILES=100'
ret=LINEOUT(file2 ,line.x)
END /*DO*/
'copy config.neu config.sys'
/*ENDE*/

Sicherlich gibt es elegantere Lösungen. (bin kein Programmierer)
Erklärung: LINEIN liest die config.sys zeilenweise und vergleicht jede Zeile mit dem
angegebenen String. (hier: FILES=120)
Wenn der String gefunden wird, wird er durch einen Neuen ersetzt. In der selben Schleife wird dann gleich die neue Datei (ebenfalls zeilenweise) geschrieben.
Natürlich kann man die beiden Strings als Variablen definieren. oder aus einer Textdatei lesen.

Re: Suchen und Ersetzen per REXX (von: Cornelis, 16:33:39)
Am Ende würde ich lieber machen:

'@del config.bkx>NUL'
'@ren config.sys config.bkx'
'@ren config.neu config.sys'
Das geht erstens schneller und zweitens bewahrt man sich dadurch eine Sicherheitskopie der ALTEN config.sys auf, anstatt nur zwei Versionen der NEUEN zu behalten: Bei wichtigen Dateien wie der config.sys würde ich das in JEDEM Fall immer machen!!
PS: Der Affenschwanz @ dient dazu, dass die Zeile nicht auch noch angezeigt wird. Das >NUL dient dazu, dass eine eventuelle Fehlermeldung unterdrückt wird, die sicher immer dann auftritt, wenn ein solches Backup noch nicht existiert - was ja an sich kein echter "Fehler" ist! Ohne das del geht aber nachher das ren schief, falls doch schon ein Backup da war...

Re: Suchen und Ersetzen per REXX (von: Martin R. Hadam, 17:20:10)
>>Ich brauche ein Tool, mit dem ich einen bestimmten Eintrag in der CONFIG.SYS suche und dann durch einen anderen ersetze. Ich möchte dieses Tool im Netzwerk über eine PROFILE.CMD einsetzen (LAN Server 4.0), ohne daß der Anmelder etwas davon mitkriegt.

Ich würde in Deinem Fall RxMulch von Ronny Flatscher empfehlen: läuft bei mir bestens für alle möglichen Zwecke.
=====
rxMulch.cmd: program to find/replace characters (strings) in file; allows
definition of hexadecimal or decimal value of single
characters
usage:
rxMulch [infile] [outfile] {[-]controlfile | /[-]switch}
infile: if missing from STDIN:
outfile: if missing, RxMulch will replace infile;
if no infile than output to STDOUT:
controlfile OR switch MUST be present: [...]
=====
Für den prakitschen Einsatz kannst Du auch die HILFE Subroutine löschen, dann wird das command file erheblich (!) kleiner.

HTH

Martin


was habt ihr gegen cube? (von: Armin, 22:44:26)
Das REXX Script cube.cmd enthält eine Vielzahl von ausgereiften, praxiserprobten Funktionen zur String-Bearbeitung. Cube eignet sich hervorragend zur Automatisierung da es anhand einer Steuerdatei arbeitet.
Für den genannten Fall der Bearbeitung der config.sys während dem LAN-Logon könnten zB sowohl cube.cmd als auch die Steuerdatei zentral auf einem Serverlaufwerk X: liegen. Leitet man den Output von cube noch ins individuelle Homedirectory zB H: des Benutzers um,
werden alle Änderungen auch noch sauber protokolliert.

Beispielaufgabe:
----------------
1. der LIBPATH soll am Ende um E:DLL; ergänzt werden und zwar nur, falls der Eintrag noch nicht existiert
2. allfällige doppelte ;; im LIBPATH ersetzen durch einfaches ;

Lösung:
-------
Im profile.cmd cube aufrufen:
call x:cube x:config.cub c:config.sys >> h:config.log

in der Steuerdatei x:config.cub steht:
--------------
CASE SENSITIVE
ADDSTRING ";E:DLL;" IN "LIBPATH=" ( IFNEW ALL AFTER
REPSTRING ";;" WITH ";" IN "LIBPATH=" (ALL
--------------

Das Schlüsselwort CASE SENSITIVE veranlasst cube, die Gross-/klein-Schreibung der bearbeiteten Zeilen zu beachten. Ohne dies ändert cube
alle bearbeiteten Zeilen automatisch auf Grossschrift.

Die Logdateien von zwei Aufrufen auf die gleiche config.sys zeigen, wie sauber cube arbeitet:

1. Aufruf
---------
ARG
CUBE 2.6 applying config.cub to c:config.sys on 8 Nov 2001 22:27:35

>>> CASE SENSITIVE

>>> ADDSTRING ";E:DLL;" IN "LIBPATH=" ( IFNEW ALL AFTER
Changed line 30
old: "LIBPATH=.;C:OS2DLL;C:IBMLANNETLIB;C:JAVA11DLL;"
new: "LIBPATH=.;C:OS2DLL;C:IBMLANNETLIB;C:JAVA11DLL;;E:DLL;"

>>> REPSTRING ";;" WITH ";" IN "LIBPATH=" (ALL
Changed line 30
old: "LIBPATH=.;C:OS2DLL;C:IBMLANNETLIB;C:JAVA11DLL;;E:DLL;"
new: "LIBPATH=.;C:OS2DLL;C:IBMLANNETLIB;C:JAVA11DLL;E:DLL;"
OS/2 COMMAND E:UTICUBE.CMD ended. 2 changes applied
---------

2. Aufruf
---------
ARG
CUBE 2.6 applying config.cub to c:config.sys on 8 Nov 2001 22:32:39

>>> CASE SENSITIVE

>>> ADDSTRING ";E:DLL;" IN "LIBPATH=" ( IFNEW ALL AFTER

>>> REPSTRING ";;" WITH ";" IN "LIBPATH=" (ALL
OS/2 COMMAND E:UTICUBE.CMD ended. 0 changes applied
---------

Anhand dieser Protokolldateien lässt sich eindeutig nachvollziehen, wann cube was wo wie geändert hat - ideale Voraussetzungen also, um allfällige Fehler (in der Steuerdatei, nicht von cube!) auch wieder ebenso automatisch korrigieren zu können.

Da cube.cmd zudem selber in REXX geschrieben ist, erfüllt es den heutigen Ruf nach "open source" bestens und eignet sich erst noch, um die REXX Kenntnisse zu erweitern.

cube RuleZ ;-) (von: Rainer Feuerstein, 23:16:28)
Ich benutze auch bei jeder Gelegenheit cube. Nur die viel zu geschwätzigen Meldungen nerven mich - hat das schonmal jemand umgebaut?

( Zeige die Threadübersicht ) [ Version zum Drucken ] ( Zur Startübersicht )

Datum Thema
08.01.2017 *

*

Name: * eMail: Benachrichtigung

Mit * markierte Felder müssen ausgefüllt werden !


php.net OpenIT © 1998-2017 by WebTeam OS2.org