"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Peal Script

Roli84 02.06.2013 - 17:14 2513 6
Posts

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
Hallo,

ich versuch mich jetzt schon seit paar Tagen wieder an Peal.. hab seit mehreren Jahren nichts damit gemacht.

Ist jemand von euch so fit in Perl mir ein kleines Script zu schreiben das man ca. so aufruft:

modify.pl "config.cfg" "maxplayer =" "50;"

Das Script sollte die config.cfg nach der Zeile/Zeilen mit "maxplayer =" durchsuchen und was immer hinter dem = (letztes zeichen im Parameter) steht durch den letzten Parameter "50;" ersetzen.

Hab echt ein Brett vorm Kopf.. bring nichtmal so einfache Sachen zam..

Wäre sehr cool wenn ihr mir helfen könntet!

icy

OC Addicted
Registered: Dec 2002
Location: :-)
Posts: 689
Perl?

Poste mal wie weit du bist bzw. wo das Problem liegt?

So gehts in Ruby
http://pastebin.com/fi299TYJ

Wandelt 'susi' in 'susi_replaced' um.
Bearbeitet von icy am 03.06.2013, 01:39

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
Danke das mit Ruby muss ich mir mal anschaun, sieht wesentlich unkomplizierter aus als das was ich hab.

Hab mich jetzt lang nimmer damit beschäftigt
Im Prinzip würde ichs so machen:
Code: PERL
#!/usr/bin/perl -w

# Parameter einlesen
$file=$ARGV[0];
$param=$ARGV[1];
$value=$ARGV[2];

# Datei öffnen
open(FILE, $file) || die "File not found";
my @lines = <FILE>;
close(FILE);

# Text austauschen, da häng ich grad noch.
my @newlines;
foreach(@lines) {
   $_ =~ s/<PREF>/ABCD/g; 
   push(@newlines,$_);
}

#Datei speichern
open(FILE, $file) || die "File not found";
print FILE @newlines;
close(FILE);

Hab das im Internet gefunden, nur das Text austauschen passt nicht für meine zwecke.

In der build.pl von Dayz Servern hab ich einen Befehl gefunden den ich aber nicht verstehe, aber ich glaube er mach genau das was ich brauche. Hier mal wie der aufgerufen wird.

Code: PERL
replace_text("s/passwordAdmin\\s=\\s\\\"\\\"/passwordAdmin = \\\"$hash\\\"/", "$conf_dir/config_$hash.cfg");
replace_text("s/RConPassword\\s[0-9a-fA-F]{8}/RConPassword $hash/", "$conf_dir/BattlEye/BEServer.cfg");

Das ist die Funktion:
Code: PERL
sub replace_text {
	system("perl -pi" . (($^O eq "MSWin32") ? '.bak' : '') . " -e \"$_[0]\" $_[1]");
	# Clean up .bak file in Windows only
	if ($^O eq "MSWin32") {
		(my $bakPath = $_[1]) =~ s/\//\\/g;
		system("del \"$bakPath.bak\"");
	}
}

Aber ich bin zu blöd zu verstehen was da passiert oder wie ich den Befehl für mich anpassen kann.

COLOSSUS

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11901
Was wird das hier? Suchst du in Wahrheit einfach nur eine Loesung fuer das beschriebene Problem, oder willst du Perl gut genug beerrschen lernen, dass du aehnliche Problemstellungen in Zukunft ohne Hilfestellung anderer loesen kannst?

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
Ein bisschen von beidem. Ich kann schon etwas programmieren aber ich bin mit dem replace_text und regex überfordert.

Früher hab ich mehr mit dem gemacht da wär das kein Problem gewesen aber im Moment schaff ichs nicht mich in die Regex reinzudenken.

Ihr mir helfen könntet die Funktion zu verstehen kann ich sie in Zukunft auch selber anpassen und verwenden sowieso.

Lukas

oc.at addicted
Avatar
Registered: Feb 2004
Location: Kunsan AB
Posts: 1883
Sieht so aus als müsstest du die Funktion replace_text mit RegEx füttern. Zeile 3 ist interessant ab Zeile 4 wird nur noch eine .bak Datei unter win32 gelöscht. Kann Perl aber leider nicht, obwohl ich denke, dass $^O der Filename ist und $_[0] bzw $_[1] die Argumente sind. Unter dieser Annahme wird in Zeile 3 perl -pi <filename> -e \<arg0>\<arg1> ausgeführt. Unter win32 wahrscheinlich perl -pi <filename>.bak -e \<arg0>\<arg1>

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
Ein Freund hat mir den Tip gegeben nach "perl ini parser" zu suchen.

http://docs.activestate.com/activep...onfig/Tiny.html

Das tut genau das was ich brauche, sogar noch mehr. Damit kann man auch Werte die gleich heißen in verschiedenen Sections bearbeiten!

Morgen mal testen.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz