Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]734[/thread]

Clean Script



<< >> 9 Einträge, 1 Seite
Gast Gast
 2006-05-22 20:19
#7742 #7742
Guten Tag.

Ich habe so gut wie keine Ahnung von Perl und möchte mich schon etwas belesen nun aber ich bräuchte doch schon eine schnelle Lösung.

Und zwar hab ich folgendes Script!:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Deletes players which haven't logged for a week and have level below 30
use warnings;
$days = 7;
$minlevel = 30;
$counter = 0;
for $file (glob "../data/players/*")
{
next unless $file =~ /xml$/;
open(FILE, $file);
@content = <FILE>;
$_ = "@content";
close(FILE);
/account="(\d+)"/;
$account = $1;
/lastlogin="(\d+)"/;
$lastlogin = $1;
/level="(\d+)"/;
$level = $1;
if ((time() - $lastlogin) > $days*24*3600 && $lastlogin > 0 && $level < $minlevel)
{
unlink("$file");
unlink("../data/accounts/$account.xml");
unlink("../data/vip/$account.xml");
print "$file\n";
$counter++;
}
}
print "$counter acccounts deleted\n";


nun möchte ich aber wenn er was gefunden hat zum beipsiel das der player (name -> Kroxie) lange nicht mehr eingeloggt hat nicht den account.xml datei löscht sondern diese öffnet!

So nun hat er sie offen sieht dann so aus:
<?xml version="1.0"?>
<account pass="dsh902" type="1" premDays="15">
<characters>
<character name="Kakak" />
<character name="Kakakn" />
<character name="Kroxie" />
</characters>
</account>

Nun soll er den Player Eintrag löschen der so aussieht:
<character name="Kroxie" />

Zum Schluss soll das ganze dann so aussehen:
<?xml version="1.0"?>
<account pass="dsh902" type="1" premDays="15">
<characters>
<character name="Kakak" />
<character name="Kakakn" />
</characters>
</account>[B]
renee
 2006-05-22 20:58
#7743 #7743
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Deletes players which haven't logged for a week and have level below 30
use strict;
use warnings;
use Tie::File;

my $days = 7;
my $minlevel = 30;
my $counter = 0;

for $file (glob "../data/players/*"){
next unless $file =~ /xml$/;
open(my $fh, "<", $file) or die $!;
@content = <FILE>;
$_ = "@content";
close(FILE);

my ($account) = $_ =~ /account="(\d+)"/;
my ($lastlogin) = $_ =~ /lastlogin="(\d+)"/;
my ($level) = $_ =~ /level="(\d+)"/;

my $playername = ''; # muss Du wissen, wie Du auf den Playernamen kommst!

if ((time() - $lastlogin) > $days*24*3600 && $lastlogin > 0 && $level < $minlevel){
for my $local_file($file,"../data/accounts/$account.xml","../data/vip/$account.xml"){
tie my @array,'Tie::File',$local_file) or die $!;
@array = grep{$_ !~ /$playername/}@array;
untie @array;
}
print "$file\n";
$counter++;
}
}
print "$counter acccounts deleted\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Slider
 2006-05-22 22:48
#7744 #7744
User since
2006-05-22
3 Artikel
BenutzerIn
[default_avatar]
my $playername = ''; # muss Du wissen, wie Du auf den Playernamen kommst!

hhmm Also den Player Namen hhmmm

Beispiel:
Player Name: Acid

Hier ist das XML Dukument dazu:
Datei heisst: Acid.xml
Code: (dl )
1
2
<?xml version="1.0"?>
<player name="Acid" account="354244" sex="1" lookdir="0" exp="595818" voc="1" level="34" access="0" cap="740" maglevel="44" lastlogin="1141855605" premticks="0" promoted="0" banned="0"><spawn x="517" y="624" z="7"/><temple x="510" y="600" z="7"/><skull type="0" kills="0" ticks="0" absolve="0"/><health now="309" max="315" food="64000"/><mana now="815" max="815" spent="14628"/><look type="133" head="0" body="114" legs="76" feet="0"/><skills><skill skillid="0" level="10" tries="37"/><skill skillid="1" level="10" tries="0"/><skill skillid="2" level="16" tries="1848"/><skill skillid="3" level="10" tries="0"/><skill skillid="4" level="10" tries="0"/><skill skillid="5" level="19" tries="2059"/><skill skillid="6" level="10" tries="0"/></skills><spells/><deaths><death name="Demodras" level="35" time="1141855500"/></deaths><inventory><slot slotid="9"><item id="2164" charges="5"/></slot><slot slotid="10"><item id="2148" count="94"/></slot></inventory><depots><depot depotid="1"><item id="2589"><inside><item id="2594"/></inside></item></depot></depots><storage><data key="5065" value="1"/></storage></player>


Also kommt der auf den Player Namen von der Datei sowie als in der Datei einen Abschnitt. Ich weiss bloss net was leichter ist dort ihn nehmen zu lassen.
Thorium
 2006-05-23 15:23
#7745 #7745
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Slider,22.05.2006, 20:48]my $playername = ''; # muss Du wissen, wie Du auf den Playernamen kommst![/quote]
Code: (dl )
  my ($playername) = $_ =~ /name="(\w+)"/;


Hättest du aber auch (fast) selber draufkommen können...\n\n

<!--EDIT|Thorium|1148383470-->
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
Slider
 2006-05-23 20:48
#7746 #7746
User since
2006-05-22
3 Artikel
BenutzerIn
[default_avatar]
ok

Danke bis jetzt erstmal nun hab ich nur noch paar Fehler:

Cant locate Tie/File.pm in @INC <@INC contains: C:/Perl/site/lib .>

und so weiter

Ich benutze Active Perl. Was stimmt da nicht?
GwenDragon
 2006-05-23 20:57
#7747 #7747
User since
2005-01-17
14757 Artikel
Admin1
[Homepage]
user image
Tie::File ist nicht installiert.

Wiki:WieInstalliereIchEinModul\n\n

<!--EDIT|GwenDragon|1148404238-->
Slider
 2006-05-24 20:07
#7748 #7748
User since
2006-05-22
3 Artikel
BenutzerIn
[default_avatar]
Global Symbol "$file" requires explicit package name at C:\Sinteria\oldclean.pl line 10
Begin not safe after errors--compilation aborted at C:\Sinteria\oldclean.pl line 10

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Deletes players which haven't logged for a week and have level below 30
use strict;
use warnings;
use Tie::File;

my $days = 7;
my $minlevel = 30;
my $counter = 0;

for $file (glob "../data/players/*"){
next unless $file =~ /xml$/;
open(my $fh, "<", $file) or die $!;
@content = <FILE>;
$_ = "@content";
close(FILE);

my ($account) = $_ =~ /account="(\d+)"/;
my ($lastlogin) = $_ =~ /lastlogin="(\d+)"/;
my ($level) = $_ =~ /level="(\d+)"/;

my ($playername) = $_ =~ /name="(\w+)"/;


if ((time() - $lastlogin) > $days*24*3600 && $lastlogin > 0 && $level < $minlevel){
for my $local_file($file,"../data/accounts/$account.xml","../data/vip/$account.xml"){
tie my @array,'Tie::File',$local_file) or die $!;
@array = grep{$_ !~ /$playername/}@array;
untie @array;
}
print "$file\n";
$counter++;
}
}
print "$counter acccounts deleted\n";
Ronnie
 2006-05-24 20:33
#7749 #7749
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=Slider,24.05.2006, 18:07]Global Symbol "$file" requires explicit package name at C:\Sinteria\oldclean.pl line 10
Begin not safe after errors--compilation aborted at C:\Sinteria\oldclean.pl line 10

Code: (dl )
for $file (glob "../data/players/*"){
[/quote]
da fehlt wohl zumindest ein my.
pq
 2006-05-24 21:36
#7750 #7750
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
zitat aus perldiag:
Code: (dl )
1
2
3
4
5
       Global symbol "%s" requires explicit package name
          (F) You've said "use strict vars", which indicates that all vari-
          ables must either be lexically scoped (using "my"), declared
          beforehand using "our", or explicitly qualified to say which pack-
          age the global variable is in (using "::").


deshalb kann es für anfänger nie schaden, use diagnostics;
im skript zu haben.

Wiki:use strict;\n\n

<!--EDIT|pq|1148492244-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 9 Einträge, 1 Seite



View all threads created 2006-05-22 20:19.