Schrift
[thread]6846[/thread]

HTML Seite generieren

Leser: 1


<< |< 1 2 3 4 >| >> 40 Einträge, 4 Seiten
Gast Gast
 2005-04-05 10:00
#53266 #53266
Hallo

ich habe für meine Projektarbeit einige
Testautomatisierungsscripte mit dem Tool WinRunner
geschrieben leider sind die Textdateien die als Protokoll
ausgegeben werden nicht sehr schön zu lesen deswegen
wollte ich ein Perlscript schreiben das die Textdateien in eine
geordnete HTML Seite umwandeln.

Zu denn Textdateien die Fehler sind in 3 Kategorien aufgeteilt
Leicht Mittel und Schwer.
Ich hatte mir das so vorgestellt das alle Fehler die Aufgetreten
sind aufgelistet werden und dann z.B. in einer art Diagram
dann der Prozentuale Anteil von Leichten Mittleren und
Schweren Fehlern angezeigt wird.

Meine Frage ist jetzt wie Realisiere ich das mit Perl da ich
leider noch nicht viel Ahnung von Perl habe fehlen mir die
Ideen.
Ronnie
 2005-04-05 10:43
#53267 #53267
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Poste doch erstmal eine Beispiel-Datei. Sonst ist es schwierig sich vorzustellen was du haben willst.
Thorium
 2005-04-05 10:44
#53268 #53268
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also...
Im Grunde teilst du dein Script in drei Teile.
Im ersten Teil liest du die Datei ein
Im zweiten Teil verarbeitest du die eingelesenen Zeilen des Logs und zählst sie
Im dritten Teil gibt du die gesammelten Daten wieder aus

Diese drei Teile kannst du, je nachdem wie du dein Script aufbauen willst, entweder in von einander unabhängige, einzelne Programmteile gliedern, oder alle logisch zusammennehmen.

Fang einfach langsam an. Schau in deiner Perldokumentation nach was über das öffnen und lesen von dateien steht (Funktionen open, print <FILEHANDLER>, close). Wenn du dann in einem Testscript eine Datei eingelesen hast und z.B. in ein Array geschrieben hast (Eine Liste aus Zeilen @array) kannst du diese Liste einzeln durchgehen. Schaue in der Doku was unter der Funktion foreach und while steht. Du möchtest da auch über den scalaren oder Listenkontext lesen (Je nachdem verhalten sich Zuweisungen anders wenn sie einen einzelnen String (scalarer context) oder eine Liste zurückgeben sollen. Man kann Listen in einen gewünschten Kontext zwingen, was aber bei deinem Problem wahrschienlich nicht sein muss - trotzdem ist es wichtig zu wissen).
Wenn du dann deine Daten gesammelt hast möchtest du vielleicht erstmal deine Auswerungsseite in reinem HTML mit einem Beispiel schreiben - danach kannst du dann dein Perlscript und das HTML über ein Template verknüpfen.
Wann immer du vor einem grösseren Problem stehst, benutze Module. Willst du die Argumente die der User über HTTP übergibt abfangen? Das Modul CGI nimmt dir diese Arbeit ab. Möchtest du, dass sich der Benutzer einlogged und ihm eine Session zuweisen? Auch dafür gibt es Module. Du solltest in deinem Script ohne grössere Handstände durchkommen. Einfach auf http://cpan.org nach den passenden Modulen suchen die dir die Arbeit abnehmen.
So ich hoffe das hilt dir erstma weiter
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.
Reugla John
 2005-04-05 11:06
#53269 #53269
User since
2005-04-05
15 Artikel
BenutzerIn
[default_avatar]
Erst einmal Danke für eure schnellen Antworten vielleicht habe
ich mich nicht so gut ausgedrückt ich habe schon
Grundkenntnisse mit dem Buch Einführung in Perl gesammelt
nur leider habe ich dort nicht gefunden was meiner Vorstellung
entspricht.

Und da ich meine Projektarbeit schon in einen Monat abgeben
muss und das Perlskript sozusagen der Abschluss ist habe ich
auch nicht die Zeit mich noch in ein Anderes Buch einzulesen.

Und zu der Beispielt Datein die Dateien die WinRunner zum
Schluss ausgibt sind einfach Textdateien in denen Ich die
Meldungen selbst bestimmen kann es sind also ist in jeder
Meldung die Zahl 1 Leichter Fehler 2 Mittlere Fehler oder
3 schwerer Fehler enthalten diese wollte ich durch das
Perlskript zählen und in einen Diagram ausgeben
renee
 2005-04-05 11:59
#53270 #53270
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da die HTML-Seiten vermutlich alle "gleich" (vom Design her) aussehen sollen, würde ich ein Template-System wie CPAN:HTML::Template, CPAN:HTML::Mason, etc...

zu CPAN:HTML::Template habe ich auch mal ne kleine deutsche Anleitung geschrieben...
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/
Thorium
 2005-04-05 12:02
#53271 #53271
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
So ich hab dir mal ein Grundgerüst gebaut...
Es ist etwas ... speziell. Du wirst wohl diese Art von Aufbau seltener zu Gesicht bekommen - ich hab sie auch erst kürzlich gesehn; sie gefällt mir aber sehr gut.
Im sub print_out kannst du nun die gesammelten Daten ausgeben.
HF

Edit: Beim Aufruf ganz oben () musste ich ein Leerzeichen einfügen, da die Forensoftware die Sache sonsnt rausschneidet. Dieses Leerzeichen einfach entfernen

Code (perl): (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/perl
use warnings;
use strict;
use CGI;
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);

_ _PACKAGE__->new()->main;

sub new
{
    my $class = shift;
    my $self = bless {}, $class;

    return $self;
}

sub main 
{
    my $self = shift;

    $self->init;
    $self->process;
    $self->print_out;
}

sub init 
{
    my $self = shift;

    $self->init_resource;
    $self->init_arguments;
    $self->init_config;

    my $q = $self->{resource}{cgi};
    print $q->header;
}

sub init_resource
{
    my $self = shift;

    $self->{resource}{cgi} = new CGI;
}

sub init_arguments
{
    my $self = shift;

    my $q = $self->{resource}{cgi};
    $self->{args} = $q->Vars;
}

sub init_config
{
    my $self = shift;

    $self->{conf} = {
        file_input => '/var/log/someting/somelog.log',
    };
}

####


sub process
{
    my $self = shift;

    $self->process_prepare;
    $self->process_do;
    $self->process_finish;
}

sub process_prepare
{
    my $self = shift;
    my $filename = $self->{conf}{file_input};

    open FILE_IN, $filename
            or die $!;
}

sub process_do
{
    my $self = shift;

    my %errors = (
        1 => 0,
        2 => 0,
        3 => 0,
    );
    
    while (<FILE_IN>) {
        my $errortype = /^(\d+)/;

        next unless $errortype;

        $errors{$errortype}++;
    }

    $self->{data}{errors} = \%errors;
}

sub process_finish
{
    close FILE_IN
        or die $!;
}

###

sub print_out
{
    my $self = shift;

    my %erros = $self->{data}{errors};

    # ... 
    # So und hier kannst du deiner Phantasie freien lauf lassen
    #
}
\n\n

<!--EDIT|Thorium|1112688354-->
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.
Ronnie
 2005-04-05 12:08
#53272 #53272
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
@Thorium: Respekt, das hat Stil - ist nur für einen Anfänger vieleicht etwas viel.

Ein kleines Beispiel (beinahe schäme ich mich) wie die Textdateien durchforstet werden können:

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 Data::Dumper;

my %seen_err;

while(<DATA>) {$seen_err{$2} += $1 if (/(\d+)\s(\w+\s\w+)/)}
print Dumper \%seen_err;

_ _DATA_ _
Bla bla
4 Leichte Fehler
2 Mittlere Fehler
3 Schwere Fehler
wbuiuigb
wogo 5 Mittlere Fehler
Reugla John
 2005-04-05 12:38
#53273 #53273
User since
2005-04-05
15 Artikel
BenutzerIn
[default_avatar]
[quote=Thorium,05.04.2005, 10:02]
Code (perl): (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/perl
use warnings;
use strict;
use CGI;
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);

_ _PACKAGE__->new()->main;

sub new
{
    my $class = shift;
    my $self = bless {}, $class;

    return $self;
}

sub main 
{
    my $self = shift;

    $self->init;
    $self->process;
    $self->print_out;
}

sub init 
{
    my $self = shift;

    $self->init_resource;
    $self->init_arguments;
    $self->init_config;

    my $q = $self->{resource}{cgi};
    print $q->header;
}

sub init_resource
{
    my $self = shift;

    $self->{resource}{cgi} = new CGI;
}

sub init_arguments
{
    my $self = shift;

    my $q = $self->{resource}{cgi};
    $self->{args} = $q->Vars;
}

sub init_config
{
    my $self = shift;

    $self->{conf} = {
        file_input => '/var/log/someting/somelog.log',
    };
}

####


sub process
{
    my $self = shift;

    $self->process_prepare;
    $self->process_do;
    $self->process_finish;
}

sub process_prepare
{
    my $self = shift;
    my $filename = $self->{conf}{file_input};

    open FILE_IN, $filename
            or die $!;
}

sub process_do
{
    my $self = shift;

    my %errors = (
        1 => 0,
        2 => 0,
        3 => 0,
    );
    
    while (<FILE_IN>) {
        my $errortype = /^(\d+)/;

        next unless $errortype;

        $errors{$errortype}++;
    }

    $self->{data}{errors} = \%errors;
}

sub process_finish
{
    close FILE_IN
        or die $!;
}

###

sub print_out
{
    my $self = shift;

    my %erros = $self->{data}{errors};

    # ... 
    # So und hier kannst du deiner Phantasie freien lauf lassen
    #
}
[/quote]
So mal sehen ob ich das richtig verstehe bist zu denn
Code (perl): (dl )
####

werden nur Funktionen definiert

bei
Code (perl): (dl )
'/var/log/someting/somelog.log',

sollte das Verzeichnis mit meinen Textdateien stehen

und bei
Code (perl): (dl )
1
2
3
4
5
    my %errors = (
        1 => 0,
        2 => 0,
        3 => 0,
    );

werden die Fehler gezählt habe ich das jetzt Einigermassen
richtig verstanden?
Thorium
 2005-04-05 12:57
#53274 #53274
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Genau so... :)
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.
Reugla John
 2005-04-06 11:08
#53275 #53275
User since
2005-04-05
15 Artikel
BenutzerIn
[default_avatar]
Ich hatte gestern leider keine Zeit mehr um das Skript zu
testen habe es aber Heute nachgeholt ich habe einfach deinen
Quellcode genommen und das Verzeichnis so geändert das es
dem meiner Textdatei entspricht

aber ich bekomme folgende Fehlermeldung

Referenc found where even-sized list exp ected at projekt.pl line 117.

line 117 ist
Code: (dl )
my %erros = $self->{data}{errors};


was ja die Ausgabe der Anzahl an Fehlern ist so weit ich das verstanden habe
<< |< 1 2 3 4 >| >> 40 Einträge, 4 Seiten



View all threads created 2005-04-05 10:00.