Schrift
[thread]851[/thread]

Letzte 10 Zeilen einer Textdatei ausgeben (Seite 2)

Leser: 7


<< |< 1 2 3 4 5 ... 8 >| >> 74 Einträge, 8 Seiten
renee
 2006-12-04 10:47
#9232 #9232
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
#!/usr/bin/perl

use strict;
use warnings;
use File::ReadBackwards;

my $file = '/path/to/file.txt';
my $frb = File::ReadBackwards->new( 'log_file' ) or
die "can't read 'log_file' $!";

for(0..9){
print $frb->readline();
}


Und was meinst Du mit
Quote
dass ich es per {GET|$params.texts} bsp. ausfurfen könnte.
?
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/
nepos
 2006-12-04 11:53
#9233 #9233
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich denke, er meint, dass der Dateiname per GET-Parameter übergeben werden soll. Wobei dann natürlich entsprechende Checks her müssen, damit niemand Dateien anzeigen lassen kann, die er eigentlich nicht sehen sollte.
Gast Gast
 2006-12-04 12:15
#9234 #9234
Hi,

oben ist es ja so:

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
    $main->{template_vars}{log_filename}=$filename;
   $main->printTemplate('admin/log_top');

   my %rooms = map {$_ => 1} split(/\s+/,$main->{input}{rooms});
   foreach (@entries)
   {
       s/[\n\r]//g;
       my ($time,$user,$room,$message) = split(/\|/,$_,4);
       if (($user eq '' && $room eq '' && $main->{input}{show_global})
        || ($user ne '' && $main->{input}{show_private})
        || ($room ne '' && !$rooms{$room} && $main->{input}{show_nonexistent})
        || ($room ne '' && $main->{input}{"show_room.$room"}))
       {
           $message = $main->fromOutputString($message);
           if ($main->{input}{"show_template.$message->{template}"})
           {
             
$message->{time} = $time;
             
$message->{_user} = $user;
             
$message->{_room} = $room;
             

             
$main->{template_vars}{params}=$message;

             
my $output = '';
             
$main->parseTemplate('log/'.$message->{template})->process($main,\$output);


Bei dem o.g. System werden Variablen einer *pm mittels {IF| abgefragt und mittels {GET| ausgegeben.

Es geht darum, dass ich in einer externen Templatedatei bsp. die Syntax {GET|$log|$texts} die gewünschten 10 letzten Zeilen anzeigen lassen kann, aber noch selbst die Möglichkeit habe, innerhalb des simplen HTML-Templates formatierungen vorzunehmen.

edit pq: zum zweiten mal quote-tags in code-tags geaendert.
das naechste mal bitte selbst die richtigen tags benutzen.
\n\n

<!--EDIT|pq|1165228377-->
Gast Gast
 2006-12-04 12:20
#9235 #9235
Achja... Danke renee, jedoch bekomme ich, wenn ich es bsp. als test.pl ausführe nur Premature end of script headers: test.pl trotz chmod 755.
renee
 2006-12-04 12:52
#9236 #9236
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da wird ja auch kein Header ausgegeben. Als CGI müsste es so aussehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use File::ReadBackwards;

my $cgi = CGI->new();
print $cgi->header('text/plain');

my $file = '/path/to/file.txt';
my $frb = File::ReadBackwards->new( 'log_file' ) or
die "can't read 'log_file' $!";

for(0..9){
print $frb->readline();
}


Keine Ahnung, welches Templating-System Du verwendest...
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/
Gast Gast
 2006-12-04 14:53
#9237 #9237
Hi,

1. Muss das als zusätzliches Servmodul installiert werden?
Weil:

Quote
Can't locate File/ReadBackwards.pm in @INC (@INC contains: /usr/lib/perl5/5.8.1/i586-linux-thread-multi /usr/lib/perl5/5.8.1 /usr/lib/perl5/site_perl/5.8.1/i586-linux-thread-multi /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.1/i586-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl .) at test.pl line 7.
BEGIN failed--compilation aborted at test.pl line 7.




2. SimpleTemplateEngine
renee
 2006-12-04 14:58
#9238 #9238
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, wie das geht steht in diesem Wiki:Artikel...
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/
renee
 2006-12-04 15:02
#9239 #9239
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zu 2.): Kenne ich nicht und habe auch auf CPAN nix gefunden. Da musst Du selbst mal suchen...
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/
TrioxX
 2006-12-04 16:56
#9240 #9240
User since
2006-11-08
10 Artikel
BenutzerIn
[default_avatar]
http://www.sascha.greatboard.de/SimpleTemplateEngi...

Über diese Schnittstelle lassen sich eigene Template-Marken definieren. Dafür wird der Plugin unter $main->{settings}{custom_template_commands} einer oder mehreren Template-Marken (Namen werden ohne die geschweiften Klammern angegeben) zugeordnet. Im Objekt, das das Modul zurückgibt, muß die Eigenschaft template_command_handlers ein Hash sein, der den Marken Methoden des Moduls zuordnet.

Trifft die Template-Engine beim Verarbeiten eines Templates auf eine Marke, die diesem Plugin zugeordnet ist, wird die in template_command_handlers eingetragene Methode des Moduls aufgerufen, und zwar mit Parametern $main, parameters, output. Dabei ist parameters der Verweis auf eine Liste von Parametern der Marke, von denen der erste der Name der Marke ist (so wäre für {MY_TAG|param1|param2} parameters gleich ['MY_TAG','param1','param2']). output ist ein Verweis auf die Ausgabe-Zeichenfolge, an diese muß die Ausgabe der Template-Marke angehängt werden.

Programmbeispiel: Falls also $main->{settings}{custom_template_commands} die Zeile MY_TAG => 'plugindir::MyPlugin.pm' enthält, dann könnte MyPlugin.pm so aussehen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      package Plugins::MyPlugin;
return bless({

template_command_handlers => {
MY_TAG => \&tagHandler,
},
});

sub tagHandler
{
my ($self, $main, $params, $output) = @_;
my ($tag, $name) = @$params;
$$output .= "$name was here";
}


Die Template-Marke {MY_TAG|Jonny} wird jetzt die Ausgabe "Jonny was here" produzieren.\n\n

<!--EDIT|TrioxX|1165246271-->
Gast Gast
 2006-12-04 19:56
#9241 #9241
Gibt es auch eine Möglichkeit, dass ganze umzusetzen, ohne zusätzliche Module auf dem Server zu installieren?

Ich hab keinen eigenen, daher wäre es wohl sinnvoller, es so zu versuchen, dass es auch ohne geht...
<< |< 1 2 3 4 5 ... 8 >| >> 74 Einträge, 8 Seiten



View all threads created 2006-12-03 12:20.