URL: https://www.overclockers.at/coding-stuff/peal-script_234898/page_1 - zur Vollversion wechseln!
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!
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.
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);
Code: PERLreplace_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");
Code: PERLsub 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\""); } }
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?
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.
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>
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