Peal Script
Roli84 02.06.2013 - 17:14 2620 6
Roli84
Little Overclocker
|
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
|
Bearbeitet von icy am 03.06.2013, 01:39
|
Roli84
Little Overclocker
|
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: #!/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. 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: 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
AdministratorGNUltra
|
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
|
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
Here to stay
|
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
|
Ein Freund hat mir den Tip gegeben nach "perl ini parser" zu suchen. http://docs.activestate.com/activep...onfig/Tiny.htmlDas 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.
|