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

auflistung der Variablen



<< >> 10 Einträge, 1 Seite
elvira
 2006-06-14 13:53
#28565 #28565
User since
2006-06-14
5 Artikel
BenutzerIn
[default_avatar]
Hallo Leute!

Ich versuche, eine Bugtracking Liste zu erstellen. Ich lade Daten wie z.B die Bugnummer, der Sender, die Version...herunter. Als nächstes muss ich für jedes Bug die Variablen zeilenweise in eine .txt Datei schreiben, damit ich sie später in eine Datenbanktabelle aufnehmen kann.
es soll ungefähr so ausschauen:

bugnummer 100001, Sender, maintainer, date, package, severity
bugnummer 100002, Sender, maintainer....

ich habe es folgenderweise probiert, aber hat nicht funktioniert:
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
my $directory="/Perl/BugFiles";
opendir(RDIR, $directory) or die "das Verzeichnis konnte nicht geöffnet werden";
my @fileList= grep(!/^\.?$/, readdir(RDIR));
close(RDIR);

foreach $file(@fileList) {
open (WRITEFILE, ">/Perl/ExtractedData/data.txt");
open(READFILE, "</Perl/BugFiles/$file");
while (my $row=<READFILE>) {
if($row=~/<TITLE>(.+)-$/){
my $bugnumber=$1;
}
if($row=~/<a href="pkgreport\.cgi\?submitter=.+">(.+)<\/a>/) {
my $sender=$1;}

if($row==~/<a href="pkgreport\.cgi\?submitter=.+">(.+)<\/a>/) {
my $maintainer=$1;}
elsif($row=~/<a href="pkgreport\.cgi\?maint=">(.+)<\/a>/)
{ $maintainer="unknown";}
if($row =~/^Date:(.+)UTC\.$/){
my $date=$1;}
if($row=~/<pre class="message">Package:(.+)$/){
my $package=$1;}
elsif($row=~/<pre class="message">Package:"$/){
$package="unknown";}
if($row=~/^Severity:(.+)$/){
my $severity=$1;} }


my @zeile=($bugnumber, $sender, $maintainer, $date, $package, $severity);

print WRITEFILE $zeile;
}

könnt ihr mir vielleicht helfen :)

Danke!\n\n

<!--EDIT|renee|1150279775-->
esskar
 2006-06-14 13:54
#28566 #28566
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
warum nicht so?
Code: (dl )
1
2
3
my $zeile=join "\t", ($bugnumber, $sender, $maintainer, $date, $package, $severity);

print WRITEFILE $zeile;
renee
 2006-06-14 14:11
#28567 #28567
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum eine unnötige Variable benutzen??

Code: (dl )
print WRITEFILE join(",",$bugnumber, $sender, $maintainer, $date, $package, $severity);


Du solltest auch mit Wiki:use strict arbeiten. Das hätte Dir bei $zeile einen Fehler angezeigt...
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-06-14 14:19
#28568 #28568
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Diese Zeile ist auch überflüssig und falsch:
Code: (dl )
1
2
     if($row==~/<a href="pkgreport\.cgi\?submitter=.+">(.+)<\/a>/) {
my $maintainer=$1;}


Erstens willst Du wahrscheinlich =~ (ohne das erste = sagen und zweitens ist es die gleiche Zeile wie obendrüber. Dann kannst Du oben sagen

Code: (dl )
1
2
3
4
     if($row=~/<a href="pkgreport\.cgi\?submitter=.+">(.+)<\/a>/) {
my ($sender,$maintainer);
$maintainer = $sender = $1;
}
\n\n

<!--EDIT|renee|1150280458-->
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/
Dubu
 2006-06-14 14:43
#28569 #28569
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=elvira,14.06.2006, 11:53]ich habe es folgenderweise probiert, aber hat nicht funktioniert:
[/quote]
"hat nicht funktioniert" ist eine etwas vage Aussage. Was hat nicht funktioniert? Wie lautete die Fehlermeldung bzw. was ist passiert?

So wie es aussieht, benutzt du auch kein "use strict" und "use warnings". Das sei dir wirklich ans Herz gelegt, um Fehler zu finden! (s. Wiki:Wissensbasis.UseStrict)

Quote
Code: (dl )
1
2
3
my $directory="/Perl/BugFiles";
opendir(RDIR, $directory) or die "das Verzeichnis konnte nicht geöffnet werden";
my @fileList= grep(!/^\.?$/, readdir(RDIR));

Cargo Cult Copying? Dein grep entfernt Verzeichniseinträge, die entweder "." lauten oder leer sind (was gar nicht vorkommen kann). Normalerweise entfernt man "." und "..", d.h.
Code: (dl )
my @fileList= grep(!/^\.\.?$/, readdir(RDIR));


Quote
Code: (dl )
1
2
3
4
5
close(RDIR);

foreach $file(@fileList)   {
  open (WRITEFILE, ">/Perl/ExtractedData/data.txt");
  open(READFILE, "</Perl/BugFiles/$file");

Hier fehlen die Fehlerabfragen für die beiden open():
Code: (dl )
1
2
3
open (WRITEFILE, '>', '/Perl/ExtractedData/data.txt') 
   or die "could not open /Perl/ExtractedData/data.txt: $!";
[und analog weiter]


Quote
Code: (dl )
1
2
3
4
5
   while (my $row=<READFILE>) {
    if($row=~/<TITLE>(.+)-$/){
       my $bugnumber=$1;
    }
[... etc ...]

- Die Regexp kommt mir ein wenig komisch vor, aber ich kenne den Aufbau dieser Bugreport-Dateien ja nicht. Endet die Titelzeile wirklich mit einem '-'?

- Wenn du die Variablen innerhalb des if-Blocks deklarierst, sind sie auch nur da sichtbar. Sie sollten wohl eher vor dem while() deklariert sein.

Quote
Code: (dl )
1
2
3
4
     my @zeile=($bugnumber, $sender, $maintainer, $date, $package, $severity);

    print WRITEFILE $zeile;
  }

Dazu haben renee und esskar ja schon geschrieben. @zeile und $zeile sind zwei verschiedene Variablen, das erste ein Array und das zweite ein Skalar.

Dann wäre meine Bitte noch, dass du dir einen anderen Stil angewöhnst, Blöcke zu beenden und einzurücken. Momentan sieht es so aus, als ob die print-Anweisung noch innerhalb der while-Schleife liegt. Siehe dazu auch perlstyle und die eine oder andere Diskussion hier im Forum. ;)
elvira
 2006-06-14 14:46
#28570 #28570
User since
2006-06-14
5 Artikel
BenutzerIn
[default_avatar]
Danke!
aber keiner hat funktioniert :(
stimmt irgend etwas bei den Variablen nicht?

unten ist einer der HTML codes, aus denen ich die Daten extrahiere:

<HTML><HEAD>
<TITLE>#100007 - at: Manpage points to obsolete doc location - Debian Bug report logs</TITLE>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"><link rel="stylesheet" href="/css/bugs.css" type="text/css"></HEAD>
<BODY>
<H1>Debian Bug report logs - <A HREF="mailto:100007@bugs.debian.org">#100007</A><BR>at: Manpage points to obsolete doc location</H1>
<div class="msgreceived">
Package: <a href="pkgreport.cgi?pkg=at">at</a>;
Maintainer for at is
<a href="pkgreport.cgi?maint=rmurray@debian.org">Ryan Murray &lt;rmurray@debian.org&gt;</a>;
Source for at is

<a href="pkgreport.cgi?src=at">at</a>.
<br>Reported by: <a href="pkgreport.cgi?submitter=aaronl@vitelus.com">aaronl@vitelus.com</a>;
Date: Thu, 7 Jun 2001 23:36:43 UTC.
</div>
<h3>Severity: minor;
Tags: patch;
<br>Merged with <a href="bugreport.cgi?bug=75262">#75262</a>,
<a href="bugreport.cgi?bug=103170">#103170</a>;
<br>Found in version 3.1.8-10;
<br><strong>Fixed</strong> in version at/3.1.8-11 by Ryan Murray &lt;rmurray@debian.org&gt;;

<br>Bug is archived. No further changes may be made.
</h3>
renee
 2006-06-14 15:25
#28571 #28571
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
34
35
#!/usr/bin/perl

use strict;
use warnings;

my $html_report = '';
my $data_file = '';
my $content = '';
my $bug = parse_file($html_report);
add_to_file($bug);


sub parse_file{
my ($file) = @_;

local $/;
open(my $fh,'<',$html_report) or die $!;
my $content = <$fh>;
close $fh;

my ($bugnumber,$package) = $content =~ /<title>(#\d+)\s?([^\s]*?)\s*?-/i;
my ($submitter) = $content =~ /pkgreport\.cgi\?submitter=([^"]*?)/;
my ($maintainer) = $content =~ /pkgreport\.cgi\?maint=([^"]*?)/ ? "unknown" : $submitter;
my ($date) = $content =~ /Date:\s?(.*?)\s?UTC/;
my ($severity) = $content =~ /Severity:\s?(.*?);/;
return join(',',$bugnumber,$submitter,$maintainer,$package,$date,$severity);
}# parse_file

sub add_to_file{
my ($file,$bug) = @_;

open(my $fh,">>",$file) or die $!;
print $fh $bug,"\n";
close $fh;
}#add_to_file
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/
elvira
 2006-06-14 16:47
#28572 #28572
User since
2006-06-14
5 Artikel
BenutzerIn
[default_avatar]
ist mit $html_report die html dateien und mit $fh die einzelnen dateien gemeint?

ps: tut mir leid, wenn ich blöde fragen stelle, aber ich bin nur eine anfängerin :)
renee
 2006-06-14 16:56
#28573 #28573
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit $html_datei ist eine einzelne HTML-Datei gemeint. du musst noch eine Schleife einbauen, damit das Parsen mit allen Dateien gemacht wird...

das $fh ist ein Filehandle.
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/
elvira
 2006-06-14 16:58
#28574 #28574
User since
2006-06-14
5 Artikel
BenutzerIn
[default_avatar]
ok, danke!
<< >> 10 Einträge, 1 Seite



View all threads created 2006-06-14 13:53.