Schrift
[thread]8150[/thread]

wie bekomm ich die grösse raus



<< >> 7 Einträge, 1 Seite
pandur
 2006-07-08 01:06
#67985 #67985
User since
2006-05-27
2 Artikel
BenutzerIn
[default_avatar]
hi

ich möchte daten von einem programm an ein perl script pipen und dabei wissen wie gross die gesendeten daten sind. hat da jemand von euch ne idee wie ich das mit der grösse hinbekommen kann?
styx-cc
 2006-07-08 01:21
#67986 #67986
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Zu Pipes hab ich gerade ncihts im Kopf, aber Bytes:

Code: (dl )
1
2
3
no utf8;
@bytes = split //, $data;
print "$#bytes Bytes\n";


Muesste gehen...

MfG

edit: der zaehlt einen zu wenig *grml\n\n

<!--EDIT|styx-cc|1152308689-->
Pörl.
Strat
 2006-07-08 01:52
#67987 #67987
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
$#bytes ist der letzte index des array @bytes, und der ist normalerweise um 1 kleiner als scalar(@bytes), die anzahl der elemente...
Code: (dl )
my $bytes = scalar(@bytes);
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pandur
 2006-07-08 10:33
#67988 #67988
User since
2006-05-27
2 Artikel
BenutzerIn
[default_avatar]
danke für die schnellen antworten.

werd es gleich mal ausprobieren.
Thorium
 2006-07-08 14:59
#67989 #67989
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was habt ihr gegen
Code (perl): (dl )
1
2
3
4
5
#!/usr/bin/perl
use strict;
use warnings;
my $data = join '',<STDIN>;
my $bytes = length($data);

?\n\n

<!--EDIT|Thorium|1152356409-->
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.
Strat
 2006-07-08 22:45
#67990 #67990
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
nichts, ist sogar besser; nur wuerde ich kein join verwenden, sondern gleich alles in einen skalar lesen, z.B.
Code: (dl )
1
2
3
4
5
my $data = do {
local $/;
<STDIN>;
}; # do
print length($data);

bei sehr grossen Dateien macht aber wohl eher folgendes sinn:
Code: (dl )
1
2
my $file = "anything.txt";
my $size = -s $file;

oder, wenn sie nicht als Datei vorliegt und einen der inhalt nicht interessiert
Code: (dl )
1
2
3
4
5
6
7
open( my $FH, "<", $fileOrPipeOrWhatever )
or die $!;
my $fileSize = 0;
while( my $line = <$FH> ) {
$fileSize += length($line);
} # while
close( $FH );

[edit]Strat: length($length) durch length($line) ersetzt, thx @betterworld[/edit]\n\n

<!--EDIT|Strat|1152435030-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2006-07-09 02:21
#67991 #67991
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Noch effizienter wäre es wahrscheinlich, wenn man noch etwas wie
Code: (dl )
1
2
use File::stat;
local $/=\(stat($FH)->blksize);

hinzufuegt. Oder besser noch mit sysread arbeiten:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use File::stat;
open( my $FH, "<", $fileOrPipeOrWhatever )
or die $!;
my $fileSize = 0;
my $blockSize = stat($FH)->blksize;
my $len;
while($len = sysread($FH, my $buf, $blockSize) ) {
$fileSize += $len;
} # while
die $! unless defined $len;
close( $FH );

(alles ungetestet. Womöglich sind noch größere Werte von $$/ sogar noch effizienter.)

[edit]Korrektur an vorherigem Beitrag herausgenommen, weil Strat es schon eingebaut hat[/edit]\n\n

<!--EDIT|betterworld|1152444046-->
<< >> 7 Einträge, 1 Seite



View all threads created 2006-07-08 01:06.