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

Strings spliten?



<< >> 7 Einträge, 1 Seite
Free Faq
 2004-08-21 21:08
#49549 #49549
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
Habe einen String, etwa wie der hier:
$String = 123456789123456789;
Würde den gern alle sagen wir mal 3 Zeichen spliten, damit es etwa so aussieht:
@Array = (123,456,789,123,456,789,123,456,789);
Gleichzeitig soll $String stückweise entfernt werden. Also die Zeichen sollen quasi "verschoben" werden.
Den es können grosse Strings von mehreren Mbs sein.
Es müssen nicht unbedingt Zahlen sein.
Es muss nciht sein, das $String durch die Zahl 3 teilbar sein wird.

Hab es erstmal so versucht:
Code: (dl )
1
2
3
4
5
6
while (1) {
push(@Blocks, substr($Data,0,3)="");
if ($Data eq "") {
 last;
}
}

Funktioniert soweit auch, allerdings hab ich hier irgendwie das Problem, das die ersten 3 Zeichen fehlen. Habe statt dessen einen leeren Arrayelement am Ende.

Habs dann so versucht:
Code: (dl )
@Blocks = $Data =~ m/.{1,3}/g;

Funktioniert soweit auch, allerdings bleibt $Data bestehen.

Hab es dann weiter versucht:
Code: (dl )
@Blocks = $Data =~ s/.{1,3}//g;

Hier gibts aber das Problem, das ich wahrscheinlich die Anzahl an Arrayelemente ausgegeben bekomme?!?!

Was mach ich falsch? Was wäre besser?\n\n

<!--EDIT|Free Faq|1093108345-->
Haut mich nicht, ich bin ein Noob!
Taulmarill
 2004-08-21 21:36
#49550 #49550
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
folgendes funktioniert bei mir ganz ausgezeichnet

Code: (dl )
1
2
3
4
5
6
7
use Data::Dumper; 
my $foo="12345678912345678";
my @foo;
while($foo){
push @foo, substr($foo, 0, 3, "");
}
print Dumper \@foo;
\n\n

<!--EDIT|Taulmarill|1093109985-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
[E|B]
 2004-08-21 21:38
#49551 #49551
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Quote
Funktioniert soweit auch, allerdings bleibt $Data bestehen.


Da setz $Data doch auf undef!
Oder hat es eine bestimmte Bedeutung, dass immer nur 3 für 3 gelöscht werden sollen?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Free Faq
 2004-08-21 22:13
#49552 #49552
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
@Taulmarill:
Cool es funktioniert. THX Aber mal ne Frage nebenbei:
Was hat es immer mit dem "foo" auf sich? Sehe ich hier nicht das erstemal.

@[E|B]:
Es sollten halt so wenig Daten wie möglich in den Strings sein, den je mehr drin ist, desto langsamer wird es.
Dachte mir, wenn ich schon die Daten rauskopiere, so kann ich die auch gleich rauslöschen, sonst hab ich statt einen String mit z.B. 2Mb grösse sondern 2 Strings mit 2Mb grösse. Das wollte ich vermeiden.
Oder ist jemand der Meinung, das das rauslöschen mehr Zeit benötigt?
Haut mich nicht, ich bin ein Noob!
Ronnie
 2004-08-21 23:07
#49553 #49553
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=Free Faq,21.08.2004, 20:13]Was hat es immer mit dem "foo" auf sich? Sehe ich hier nicht das erstemal.[/quote]
http://de.wikipedia.org/wiki/Foo\n\n

<!--EDIT|Ronnie|1093115256-->
pq
 2004-08-21 23:19
#49554 #49554
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
my @Blocks = $Data =~  m/.{1,3}/g;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
coax
 2004-08-22 00:55
#49555 #49555
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
ist es das was du suchst ...?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use strict;
use warnings;

my $string = 'abcdefghijklmnopqrstuvwxzy0';

while($string =~ s/(...)//) {
   print "$1\n";
}


Grusz coax.
,,Das perlt aber heute wieder...'' -- Dittsche
<< >> 7 Einträge, 1 Seite



View all threads created 2004-08-21 21:08.