Peal Script

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/peal-script_234898/page_1 - zur Vollversion wechseln!


Roli84 schrieb am 02.06.2013 um 17:14

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 schrieb am 02.06.2013 um 20:35

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.


Roli84 schrieb am 15.06.2013 um 17:17

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 schrieb am 15.06.2013 um 19:18

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 schrieb am 15.06.2013 um 22:51

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 schrieb am 16.06.2013 um 00:45

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 schrieb am 23.06.2013 um 02:34

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.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2024