Schrift
[thread]8432[/thread]

letzte Spalte in jeder zeile ändern: die zahlen durch best. zahl teilen



<< |< 1 2 3 4 ... 6 >| >> 58 Einträge, 6 Seiten
sabrina
 2006-10-18 18:37
#70925 #70925
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
Ich möchte die Letzte Spalte in jeder Zeile durch 1024 teilen, damit ich die dort angegebenen KB in MB umrechnen kann.
Wie kann ich das Perl am besten sagen, ich möchte allerdings Zahlen in anderen Spalten nicht ändern.


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
#!/usr/bin/perl
use warnings;
use strict;
my @data;
my $columns   = 5;
open(FH,"<BLUBBER.txt") or die $!;               
while(my $line = <FH>) {               
  chomp $line;               
my @array = (split(/[\t\s\\]/,$line))[0..($columns-1)];  
  foreach (@array) {
      s/^\s+/;/g;                    
      s/\s+$/;/g;           
  } # foreach
if ($line =~/\bBLUBB|SAND?\b/ and $line !~/\bMUSCHEL\b/){
  push(@data,[@array]);
} # if
} # 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);
}
    open(OUTDATEN,">ZIEL.txt") or die $!;
   for my $entry(@data)
{
print OUTDATEN join(';',@$entry),"50","\n";
}
close (OUTDATEN) or die $!;
sub find_longest{                           
  my $longest = 0;
  for(@_){
      my $length = length($_);
      $longest = $length if($length > $longest);
  }
return $longest;
}  

@renee hast du meine antwort in perlunity gelesen? Da nichts mehr kam dachte ich mir ich probiers hier noch mal. Bin hier nur nicht so flexibel. Da Perl community im geschäft nicht läuft.
Hat mir jemand einen Tipp welche funktion ich nehmen muss splice wird es wohl nicht sein.
Würde mich über jede antwort freuen.
lg sabrina
Taulmarill
 2006-10-18 18:45
#70926 #70926
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
müsste doch so gehen:
Code: (dl )
1
2
3
for my $line ( @data ) {
$line->[-1] /= 1024;
}
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
sabrina
 2006-10-18 19:16
#70927 #70927
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
das kann ich doch nach dem split einfuegen,
aber ich bekomme nur ne fehlermeldung und zwar folgende
Code: (dl )
1
2
3
"my" variable $entry masks earlier declaration in same scope at BLUBBER.pl line 42.
syntax error at BLUBBER.pl line 16, near "/="
Execution of BLUBBER.pl aborted due to compilation errors

liegt es am CODE oder an der stelle in der ich ihn einfuege?
lg sabrina schoenen abend
bloonix
 2006-10-18 21:23
#70928 #70928
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Ja, direkt nach dem split!

Code: (dl )
1
2
   my @array = (split(/[\t\s\\]/,$line))[0..($columns-1)];
  $array[-1] /= 1024;


Hast du da vielleicht versucht, die Variable $entry doppelt zu deklarieren?\n\n

<!--EDIT|opi|1161192248-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
sabrina
 2006-10-19 10:32
#70929 #70929
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
Guten Morgen opi,
nein ich hab das $entry nicht noch mal deklariert.
Hab aber den fehler gerade gefunden, und zwar hate ich geschrieben:
Code: (dl )
$line->[-1] /= 1024;

Aber jetzt geht es, mit deinem CODE!
Nur hab ich jetzt folgendes problem mein ergebnis vom PC stimmt nicht mit dem vom Taschenrechner überein.
In der ersten Zeile, letzte Spalte steht 32016  (KB) und das teilen durch 1024 damits MB gibt.
Mein Taschenrechner sagt es gibt 31.265625   (MB) und der PC sagt es seien 0.03125   (MB).
Liegt das daran das meine Zahl so aussieht 32 016  kann es am Leerzeichen liegen?
lg sabrina\n\n

<!--EDIT|sabrina|1161240197-->
bloonix
 2006-10-19 10:49
#70930 #70930
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Moin, ich muss mir erstmal den Schlaf aus den Augen wischen =)

Joah genau! Schau mal in deine Split-Anweisung... \s

Entweder, du konkatinierst Spalte 5+6 oder arbeitest mit einem Match.
Aber du wirst das Problem haben, dass wenn Spalte 5 und 6 tatsächlich
nicht zusammen gehören und Zahlen sind. Oder kannst du mit Sicherheit
behaupten, dass wenn Spalte 5+6 das Format 32 016haben, diese
beiden Zahlen zusammengehören? Das wäre mal interessant...\n\n

<!--EDIT|opi|1161240788-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2006-10-19 10:49
#70931 #70931
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
versehentlich doppelt gepostet\n\n

<!--EDIT|opi|1161240690-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
sabrina
 2006-10-19 10:57
#70932 #70932
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
Das eigendliche problem ist das das Leerzeichen, kein Leerzeichen ist. Hört sich blöd an, ist aber so :D  es ist ein Hexalzeichen a0.
Dieses Zeichen wird in einer folge Datei entfernt, denn in dieser Datei bekomme ich es nicht raus.
Das bedeutet auch das ich mit Sicherheit sagen kann das 32 016 in einer Spalte steht und eine Zahl ist, aber wie erklär ich das Perl?
Du kennst da nicht zufällig einen trick?
lg sabrina
renee
 2006-10-19 11:08
#70933 #70933
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ist die KB-Angabe immer die letzte Spalte?
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/
bloonix
 2006-10-19 11:26
#70934 #70934
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Mir fällt nur das ein...

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

my @vfile = (
  's1 s2 s3 s4 32 056 KB',
  's1 s2 s3 s4 32 KB',
);

my $columns = 5;

while (defined (my $line = shift @vfile)) {
  # $columns ohne -1
  my @array = (split(/[\t\s\\]/,$line))[0..($columns)];
  # falls die 6. Spalte leer ist und kein KB da steht
  if ($array[$columns]) {
     my $last = pop @array;
     $array[-1] .= $last if $last =~ /^\d+$/;
  }
  $array[-1] = sprintf('%.2f', $array[-1] / 1024);
  foreach (@array) {
     s/^\s+/;/g;
     s/\s+$/;/g;
  }
  print Dumper(\@array);
}


#> ./test.pl
$VAR1 = [
's1',
's2',
's3',
's4',
'31.30'
];
$VAR1 = [
's1',
's2',
's3',
's4',
'0.03'
];
\n\n

<!--EDIT|opi|1161243017-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 3 4 ... 6 >| >> 58 Einträge, 6 Seiten



View all threads created 2006-10-18 18:37.