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

split funktion



<< >> 8 Einträge, 1 Seite
Gast Gast
 2006-04-11 13:29
#64710 #64710
Also ich hab hier nen schönen Text Story

Aufgabe aus dem Tutorial :

Das ganze File soll in einen Array eingelesen werden (dies ist natürlich im Allgemeinen nicht angebracht, da das File sehr gross sein kann, aber wir wollen uns jetzt nicht darum kümmern.) Jede Zeile des Files ist ein Element des Arrays.

Die chop -Funktion mit einem Array als Parameter schneidet den letzten Buchstaben jedes Array-Elementes ab.

Wie wir schon gesehen haben, kann der gesamte Array mit folgender Anweisung zusammengefügt werden: $text = "@lines";

Verwende die split-Funktion mit dem Suchstring als regulärer Ausdruck für die Trennstelle, an welcher der Text unterteilt werden soll. Das Resultat ist ein Array aller Substrings, welche vom Suchstring eingeschlossen sind.

Drucke der Reihe nach jedes Arrayelement, den Suchstring und das nächste Arrayelement aus

Beachte, dass das letzte Element des Arrays @food den Index $#food hat.

Das Prog soll den Text so splitten das er später ca so aussieht

discovered (this is the truth) that when he
t kinds of metal to the leg of a frog, an e
rrent developed and the frog's leg kicked,
l onger attached to the frog, which was dea
normous advances in the field of amphibian
ch it hop back into the pond -- almost. Bu
ond -- almost. But the greatest Electrical
ectrical Pioneer of them all was Thomas Edi

also die "the" so schön unterinander halt nur in meinem Text mit "du".



#!usr/local/bin/perl
#
use strict;
my $z = 1;
my $text = '/SAN/content/cgi-bin/text';
open (INFO, $text);
my @lines = <INFO>;
close (INFO);
foreach my $zeile (@lines)
{
if ($zeile=~/[Dd]u/ ) {

my @lines = split (/[Dd]u/, $zeile);

foreach my $test_element (@lines){

print "$test_element";

}
}
}
Crian
 2006-04-11 13:37
#64711 #64711
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Und was war jetzt deine Frage?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
haijp
 2006-04-11 14:00
#64712 #64712
User since
2006-04-11
14 Artikel
BenutzerIn
[default_avatar]
hmmm die frage war jetzt wie ich das prog richtig schreibe weil so wie ich bis jetzt habe ist es nicht gerade ein "hurra" wert :( komm aber auch nicht wirklich weiter weil ich es nicht so richtig verstehe.
Strat
 2006-04-11 16:27
#64713 #64713
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
chop nie verwenden, um zeilenumbrueche am ende abschneiden; dafuer gibts chomp

vielleicht folgendermaszen? (bin mir nicht sicher, ob ich die aufgabenstellung korrekt verstehe)
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
my $filename = "xyz.txt";

# 1. Datei zum lesen oeffnen
# beim open immer fehler abfangen, sonst geht spaeter mal was
# schief und man sucht an der falschen stelle
open (my $FH, "<", $filename)
or die "Error: couldn't read file '$filename': $!\n";

# 2. Dateiinhalt in ein Array einlesen
# und eventuell zeilenumbrueche am ende wegwerfen
my @lines = <$FH>;
chomp(@lines);

# 3. Datei schliessen
close ($FH);

4. Datei in einen String verwursten
my $text = join(" ", @lines); # besser als "@lines", weil unabhaengig von $"


# stattdessen kann man auch schreiben:
# my $text = do {
# open (my $FH, "<", $filename) or die $!;
# local $/; # undef
# my $text = <$FH>;
# close $text; # eigentlich mit my $FH ueberfluessig
# $text; # zurueckgeben
# };
# nur wird halt da nicht mit einem leerzeichen gejoined, sondern
# die zeilenumbrueche bleiben drinnen stehen; das kann man
# aber mit $text =~ s/\n/ /g; korrigieren


# 5. an einer bestimmten stelle aufsplitten
my @parts = split(/[Dd]u/, $text);

# schleife mit index
foreach my $i (0..$#parts) {
print "This: $part[$i]\n";

if ($i < $#parts) {
print "Next: ", $part[$i+1], "\n";
}
else {
print "Next: ### EOF erreicht ###\n";
}
} # foreach
\n\n

<!--EDIT|Strat|1144758601-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2006-04-11 17:12
#64714 #64714
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Vielleicht sollte noch ein \b an den Anfang des regulären Ausdrucks? Sonst erwischt du eventuell auch einen Kakadu =)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
haijp
 2006-04-11 17:39
#64715 #64715
User since
2006-04-11
14 Artikel
BenutzerIn
[default_avatar]
ähm der printet mir so den ganen text aus o.O und das jede zeile 2 mal glaube hast maybe aufgabe nicht ganz verstanden trotzdem thx für eure bemühungen meine dummheit zu verringern ich kanns ja nochmal versuchen ganz easy zu erlären also

einfach was mir reichen würde erstmal das er nur die zeilen ausgibt wo überhaupt gesplittet wird also wo ein du drin vorkommt (hab ich schon) so nur der splittet bei mir was komisch also das was noch genau fehlt ist wo und wie ich den split einsetze naja ich pack das schon irgendwie :P trozdem nochmal thx für bissherige
pq
 2006-04-11 17:58
#64716 #64716
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=haijp,11.04.2006, 15:39]ähm der printet mir so den ganen text aus o.O und das jede zeile 2 mal glaube hast maybe aufgabe nicht ganz verstanden trotzdem thx für eure bemühungen meine dummheit zu verringern ich kanns ja nochmal versuchen ganz easy zu erlären also

einfach was mir reichen würde erstmal das er nur die zeilen ausgibt wo überhaupt gesplittet wird also wo ein du drin vorkommt (hab ich schon) so nur der splittet bei mir was komisch also das was noch genau fehlt ist wo und wie ich den split einsetze naja ich pack das schon irgendwie :P trozdem nochmal thx für bissherige[/quote]
dir ist deine komma-taste kaputtgegangen. ich würd mir an deiner stelle
schleunigst eine neue tastatur besorgen, dennkommataerleichterndiekommunikationungemein,ungefährsowieleerzeichen.
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
Crian
 2006-04-11 19:26
#64717 #64717
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Entweder selber schreiben oder Aufgabenstellung genau erklären.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 8 Einträge, 1 Seite



View all threads created 2006-04-11 13:29.