Schrift
[thread]11583[/thread]

split()

Leser: 3


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
taikahn22
 2008-04-05 15:13
#107907 #107907
User since
2008-04-05
6 Artikel
BenutzerIn
[default_avatar]
Hallo ihr Freaks!

Könntet ihr mir bei der split() funktion einmal helfen? UNd zwar möchte ich aus einer Textdatei mit dem Inhalt

key11=val11,key12=val12,key13=val13,key14=val14

die Daten auslesen und mit der Funktion split() teilen.
Dazu habe ich folgenden Quelltext geschreiben

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#! perl
$i=0;


open(test,"<test.txt");
while(<test>)
{
($key,$value)=split(/,/);

print "$key $value";

}
close(test);


Als Ausgabe bekomme ich aber immer nur key11=val11 key12=val12...Wie kann das sein? Wo ist der Rest? Wieso macht die Funktion nicht mehr??Vielen Dank!!!!
murphy
 2008-04-05 15:25
#107908 #107908
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
taikahn22+2008-04-05 13:13:34--
[...] Und zwar möchte ich aus einer Textdatei mit dem Inhalt

key11=val11,key12=val12,key13=val13,key14=val14

die Daten auslesen [...]

Code: (dl )
1
2
3
[...]
($key,$value)=split(/,/);
[...]


Als Ausgabe bekomme ich aber immer nur key11=val11 key12=val12...Wie kann das sein?


Das kann sein, weil es genau das ist, was Du Deinem Rechner befohlen hast ;-)

Quote
Wo ist der Rest?


Nach Deinen Beispieldaten zu schließen, enthält Deine Eingabedatei nur eine Zeile, weshalb Deine while-Schleife auch nur ein einziges mal durchlaufen wird. Mit der split-Anweisung zerlegst Du nun diese eine Zeile in Teile, die durch ',' voneinander getrennt sind. Von der resultierenden Liste weist Du die ersten zwei Element den Variablen $key und $value zu.

Quote
Wieso macht die Funktion nicht mehr? [...]


Sie tut genau das, wozu sie gedacht ist und was in der Dokumentation steht ;-)

Ich vermute, Du möchtest eigentlich split zweimal verwenden: Einmal um die Eingabe an Kommata aufzuteilen und einmal um die Teile an '=' aufzuteilen. Du musst also auch zwei Schleifen schachteln: Eine über die Eingabe und eine über die Resultate des ersten split-Aufrufes...
When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2008-04-05 15:31
#107909 #107909
richtig wäre:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#! perl
use strict;
use warnings;

my $file='test.txt';

open(test,"<", $file) or die "konnte $file nicht oeffnen ($!)";
while(my $line=<test>)
{
 chomp($line);
 my @pairs=split(/,/,$line);
 for my $pair (@pairs)
 {
  my ($key,$value)=split(/=/,$pair)
  print "$key $value\n";
 }
}
close(test);
taikahn22
 2008-04-05 15:34
#107910 #107910
User since
2008-04-05
6 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ersteinmal vielen vielen Dank für die schnelle Hilfe. Mein Ziel soll dann genau da sein was du meintest. Möchte dann noch das = Zeichen weg bekommen. Das Problem ist auch noch ich möchte es dann gerne noch so haben das aus meiner Datei key11 im Array[0] steht und val11 in Array[1] undso weiter....

Habe dafür hier mal noch ne modifikation.... Aber dies funzt auch nicht so wie ich das möchte.....Diese komische Split funktion soll einfach mal bis zum Ende der Zeile lesen.... :-((

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#! perl
$i=0;


open(test,"<test.txt");
while(<test>)
{
($key[$i],$value[$i])=split(/,/);

print "$key[$i] $value[$i]";
$i++;
}
close(test);


IN aller Kürze nocheinmal. Ich möchte damit jetzt bezwecken das key11 in $key[0] und val11 in $value[0] usw steht... Aber irngedwie gehts nicht.... Menno
renee
 2008-04-05 15:56
#107911 #107911
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
my $line = 'key11=val11,key12=val12,key13=val13,key14=val14';
my (@keys,@values);
my $i = 0;

for my $pair ( split /,/, $line ){
    ($keys[$i],$values[$i]) = split /=/, $pair;
    $i++;
}


ungetestet...
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/
murphy
 2008-04-05 16:21
#107912 #107912
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
taikahn22+2008-04-05 13:34:27--
[...] Ich möchte damit jetzt bezwecken das key11 in $key[0] und val11 in $value[0] usw steht [...]


Bist Du sicher, dass hier nicht vielleicht ein Hash die richtige Datenstruktur wäre? Zum Beispiel so, um auch noch eine andere Variante die Daten einzulesen zu zeigen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;
use warnings;

use Data::Dumper;

my %stuff;

foreach (do {
  open my $test, '<', 'test.txt' or die "I/O Error: $!\n";
  local $/;
  split /[,\r\n]+/, <$test>;
}) {
  my ($key, $value) = split /=/;
  $stuff{$key} = $value;
}

print Dumper \%stuff;
When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2008-04-05 16:59
#107914 #107914
oder:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;

use Data::Dumper;

my %stuff= split(/,|=/,do {
  open my $test, '<', 'test.txt' or die "I/O Error: $!\n";
  local $/;
  $_=<$test>;
  $_=~s/[\r\n,]+/,/;
});

print Dumper \%stuff;
taikahn22
 2008-04-05 18:22
#107916 #107916
User since
2008-04-05
6 Artikel
BenutzerIn
[default_avatar]
Vielen Vielen Dank für eure Antworten! Alles super Vorschläge. Haben mir sehr geholfen!!!! Top Forum!!!! Danke!!!!! :-)
Gast Gast
 2008-04-05 19:04
#107917 #107917
Und wie hast du es nun gemacht???

Ach so:
Hoffentlich weist du, dass mehr als drei Ausrufungszeichen ein Anzeichen für Wahnsinn ist?! ;-)
taikahn22
 2008-04-05 21:08
#107924 #107924
User since
2008-04-05
6 Artikel
BenutzerIn
[default_avatar]
Hey! Habe die Variante des 3 Quelltextes genommen geht einwandfrei. Habe somit jedes Wort in seinem wohlbehüteten Array :-) kann mireventuell noch jemand erklären was genau ein Arry of Hash ist? Kenne nur ein Arraya von hashreferenzen...
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-04-05 15:13.