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

perl: leerzeilen entfernen (Seite 11)

Leser: 13


<< |< 1 ... 8 9 10 11 12 >| >> 114 Einträge, 12 Seiten
sabrina
 2006-08-11 13:38
#68661 #68661
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
@Ronnie
jetzt bekomme ich zwar keine fehlermeldung mehr, hab aber immer noch die dleiche ausgabe.
lg sabrina
sabrina
 2006-08-11 13:53
#68662 #68662
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
meine ausgabe in der DOS box sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
Use of uninitialized value in sprintf at blubb.pl line 17, <DATA> line 210.
Use of uninitialized value in sprintf at blubb.pl line 17, <DATA> line 210.
Use of uninitialized value in sprintf at blubb.pl line 17, <DATA> line 210.
Use of uninitialized value in length at blubb.pl line 43, <DATA> line 210.
Use of uninitialized value in length at blubb.pl line 43, <DATA> line 210.
Use of uninitialized value in length at blubb.pl line 43, <DATA> line 210.
<<
Use of uninitialized value in sprintf at blubb.pl line 35, <DATA> line 210.
Use of uninitialized value in sprintf at blubb.pl line 35, <DATA> line 210.
Use of uninitialized value in sprintf at blubb.pl line 35, <DATA> line 210.
<<
lg sabrina
renee
 2006-08-11 14:19
#68663 #68663
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Weißt Du denn mittlerweile was der Feldtrenner ist? Poste mal Dein Programm wie Du es benutzt hast und die Eingabedaten.
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/
sabrina
 2006-08-11 14:37
#68664 #68664
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
@renee
das ist mein code:
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
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/perl -w

use warnings;
use strict;

my @array = ('Mailbox','usw');
my @_daten = ("");    # Speicher fuer alle Datensaetze

my @matrix = (\@array,\@_daten);  #stopf die beiden arrays in ein array
my @data;
open(DATA, "<blubb.txt")   or die "Datei nicht gefunden\n";
while(<DATA>) {  # alles was unten in __DATA__ steht symbolisiert eine Datei

chomp;
 my $zeile;
 my @matrix = ();
 @matrix   = split(/[\t\s\\]/, $zeile); # $_ ist standard
#@matrix   = split(/\s/);
foreach (@matrix) {
 $string =~ s/^\s+/;/g; # fuehrende und
  $string =~ s/\s+$/;/g; # abschliessende Blanks entfernen
} # foreach

push(@data,[@matrix[0..2]]);

} # while


my $len_vorname = find_longest(map{$_->[0]}@data);
my $len_nachname = find_longest(map{$_->[1]}@data);
my $len_domain = find_longest(map{$_->[2]}@data);

for my $entry(@data){
print sprintf("%-*s %-*s %-*s<<\n",$len_vorname,$entry->[0],
                                 $len_nachname,$entry->[1],
                                 $len_domain,$entry->[2]);
}

sub find_longest{
my $longest = 0;
for(@_){
 my $length = length($_);
 $longest = $length if($length > $longest);
}

return $longest;
}

die feldtrenner sind \t,\s,\\ (taps, leerstellen und backslash)
das ist die datei die ich einlese:
Code: (dl )
1
2
3
Mailbox    Last Logged on By    Size (KB)    Total Items    Last Logon Time    Last Logoff Time    
Auerknecht Benni DOMAINNAME\benutzername 32 016 85 5.7.2006  16:36 5.7.2006  16:36
Ahrens-Lessing Sieglinde DOMAINNAME\benutzername 66 715 457 6.7.2006  6:31
lg sabrina
renee
 2006-08-11 15:50
#68665 #68665
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du deklarierst $string in der Schleife, weist der Variablen nie einen Wert zu und versuchst dann zu splitten. Das kann nicht funktionieren. Das mit @_daten und @array brauchst Du nicht. So funktionierts:

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
36
37
38
39
40
#!/usr/bin/perl -w

use warnings;
use strict;

my @data;

open(DATA, "<blubb.txt") or die "Datei nicht gefunden\n";
while(my $zeile = <DATA>) { # alles was unten in __DATA__ steht symbolisiert eine Datei
chomp $zeile;
my @matrix = split(/[\t\s\\]/, $zeile); # $_ ist standard
foreach my $string (@matrix) {
$string =~ s/^\s+/;/g; # fuehrende und
$string =~ s/\s+$/;/g; # abschliessende Blanks entfernen
} # foreach

push(@data,[@matrix[0..2]]);

} # while


my $len_vorname = find_longest(map{$_->[0]}@data);
my $len_nachname = find_longest(map{$_->[1]}@data);
my $len_domain = find_longest(map{$_->[2]}@data);

for my $entry(@data){
print sprintf("%-*s %-*s %-*s<<\n",$len_vorname,$entry->[0],
$len_nachname,$entry->[1],
$len_domain,$entry->[2]);
}

sub find_longest{
my $longest = 0;
for(@_){
my $length = length($_);
$longest = $length if($length > $longest);
}

return $longest;
}
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/
sabrina
 2006-08-11 16:06
#68666 #68666
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
@renee
also ich hab jetzt dein code uebernommen so wie er ist, aber es funktioniert noch nicht ganz!
sorry jetzt gibt er mir aus:
Code: (dl )
1
2
3
Mailbox                   Last                    Logged           <<
Auerknecht                Benni                   DOMAINNAME   <<
Ahrens-Lessing            Sieglinde               DOMAINNAME   <<

benutzername und die anderen sachen fehlen, aber sie stehen einfach toll untereinander genau richtig!
hab den cod echt nicht veraendert!
lg sabrina
sabrina
 2006-08-11 16:12
#68667 #68667
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
@renee
hab gelesen das man maximale eintraege bei split eingeben kann
stimmt das so?
Code: (dl )
1
2
3
 
my @matrix = split(/[\t\s\\]/, $zeile,5);

das funktioniert natuerlich erst wenn alle eintraege wieder da sind denn sonst gibt es keine 5 eintraege sondern nur 3.
weist du vielleicht warum nur 3 angezeigt werden in deiner version.
lg sabrina
renee
 2006-08-11 16:16
#68668 #68668
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Weil ich das hier so angegeben habe:
Code: (dl )
1
2
3
4
5
for my $entry(@data){
print sprintf("%-*s %-*s %-*s<<\n",$len_vorname,$entry->[0],
$len_nachname,$entry->[1],
$len_domain,$entry->[2]);
}


Ich hatte gestern eine Programmversion gepostet, bei der Du alles einstellen kannst.

Probier mal:
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
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl

use warnings;
use strict;

my @data;
my $file = 'mailbox.txt';
my $delimiter = '\s{2,}|\t|\\';
my $columns = 2;

open(my $fh,'<',$file) or die $!;
while(my $line = <$fh>) { # alles was unten in __DATA__ steht symbolisiert eine Datei
chomp $line;
my @array = (split(/$delimiter/,$line))[0..($columns-1)];

foreach (@array) {
s%^\s+%%g; # fuehrende und
s%\s+$%%g; # abschliessende Blanks entfernen
} # foreach

push(@data,[@array]);
} # while
close $fh;

my $format = '';

for my $i(0..scalar(@{$data[0]})-1){
my $max = find_longest(map{$_->[$i]}@data);
$format .= '%-'.$max.'s ';
}

for my $entry(@data){
print sprintf($format . "<<\n",@$entry);
}

sub find_longest{
my $longest = 0;
for(@_){
my $length = length($_);
$longest = $length if($length > $longest);
}

return $longest;
}
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/
sabrina
 2006-08-11 16:25
#68669 #68669
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
@renee
oh sorry, probiers gleich mal aus.
danke das du dir so viel zeit nimmst!
meld mich dann wieder.
lg sabrina
sabrina
 2006-08-11 16:40
#68670 #68670
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
@renee
ein ganz grosses danke schoen hier mein codeteil den ich veraendert habe
Code: (dl )
1
2
3
4
5
6
my $columns   = 5;

open(my $fh,'<',$file) or die $!;
while(my $line = <$fh>) {  # alles was unten in __DATA__ steht symbolisiert eine Datei
 chomp $line;
 my @array = (split(/[\t\s\\]/,$line))[0..($columns-1)];


es kommen keine fehlermeldungen und auch nicht zwischen drin mal irgend etwas was dort nicht hingehoert!
es steht sogar perfekt untereinander!
1000 mal danke!!
jetzt kann ich endlich weiter machen!danke
duerft ich mich bei dir melden falls ich wieder dumme fragen habe, versuch auch die duemmsten raus zu filtern ;-)
zum glueck gibt es dieses forum, danke
lg sabrina
<< |< 1 ... 8 9 10 11 12 >| >> 114 Einträge, 12 Seiten



View all threads created 2006-08-07 10:33.