Schrift
[thread]8001[/thread]

Probleme mit Inkrementierung



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
nikster77
 2006-05-21 03:58
#66364 #66364
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen.
Ich habe ein Problem damit Variablen zu inkrementieren...
Und zwar haette ich gerne einen ganz normalen Zaehler den ich an das Variablenende anhaengen kann, so das ich spaeter:
-Variable[1]
-Variable[2]
etc. bekomme.
Das ganze hatte ich mir so gedacht aber es funktioniert leider nicht.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my $supertext = undef;
$i = 0;

open(TEXT, "/home/nikster/supertext") || die "Unable to read from supertext : $!";
while(<TEXT>)
{
if ($_ =~ m/^hallo/ig) {
$i += 1;
#print "$i\n";
$text[$i] = $_;
}
}
close (TEXT);


Ich moechte das *nicht* in ein Array schreiben.

Danke fuer eure Hilfe
esskar
 2006-05-21 04:26
#66365 #66365
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
nochmal! was willst du genau tun?
momentan ist $text[$i] zugriff auf das array @text an der Stelle $i.

by the way: use strict;
pq
 2006-05-21 04:53
#66366 #66366
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nikster77,21.05.2006, 01:58]Ich moechte das *nicht* in ein Array schreiben.[/quote]
warum nicht?
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
nikster77
 2006-05-21 04:54
#66367 #66367
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Ich moechte einfach das bei jedem match eine variable
text1, text2, text3, etc. erstellt wird und dieser die aktuelle Zeile zugewiesen.
pq
 2006-05-21 05:16
#66368 #66368
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
warum muss es $text1 sein und nicht etwa $text[1] oder $text{1}?

man kann sowas in perl sogar machen, aber so ziemlich jeder halbwegs
erfahrene programmierer wird dir davon abraten. macht nur ärger.
es gibt fälle, bei denen sowas ("symbolische referenzen") nützlich ist,
aber das sind fälle, bei denen es keine alternativen wie die mit arrays
oder hashes gibt.

Wiki:use strict;\n\n

<!--EDIT|pq|1148174351-->
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
nikster77
 2006-05-21 05:36
#66369 #66369
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Hmm.. es ist mir ziemlich egal ob es $text1 oder $text[1] oder $text.1 ist...
Das Problem ist:
wenn ich die Lines in ein Array schreibe muss ich sie erst wieder rausholen um sie weiterzubearbeiten.
Also z.B. so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
open(TEXT, "/home/nikster/supertext") || die "Unable to read from supertext : $!";
while(<TEXT>)
{
if ($_ =~ m/^hallo/ig) {
push(@text, $_);
}
}
close (TEXT);

foreach $line (@text) {
#print "$line\n";
push @temp, (split(/\:|\[|\]| /, $line);
}

Du siehst (vielleicht) ich moechte die Variablen noch weiterbearbeiten, mit split und sed und und und...
Aus dem was dann dabei rauskommt bekomme ich mehrere Variablen die ich in verschiedene Arrays schreiben will.

push @temp, (split(/\:|\[|\]| /, $line);

funktioniert nicht und selbst wenn es funktionieren wuerde haette ich immer noch alle variablen in einem Array...
pq
 2006-05-21 06:09
#66370 #66370
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nikster77,21.05.2006, 03:36]Hmm.. es ist mir ziemlich egal ob es $text1 oder $text[1] oder $text.1 ist...[/quote]
das klang aber zuerst noch anders.

Quote
push @temp, (split(/\:|\[|\]| /, $line);

funktioniert nicht

definiere "funktioniert nicht".

also ich hab noch nicht ganz verstanden, was du willst; was du beschreibst,
ist ziemlich schwammig formuliert.
wie wär's denn damit als anregung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my @lines;
open my $fh, "<", "/home/nikster/supertext" or die "Unable to read from supertext : $!";
while (<$fh>) {
 if (m/^hallo/i) {
   push @lines, [split m/[:\[\]]/, $_];
 }
}
close $fh;

print $lines[4]->[3];
print "@{ $lines[4] }\n";


perlref\n\n

<!--EDIT|pq|1148177412-->
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
nikster77
 2006-05-21 14:25
#66371 #66371
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Ja, das ist ganz gut aber nicht wirklich einfach weiterzuverarbeiten.

Aber ob es jetzt schlechter Stil ist oder nicht... ich haette, ganz unabhaengig von der jetzigen Problemstellung, gerne die Moeglichkeit Variablen mit laufenden Nummern am Ende zu erzeugen.
var([1])
var([2])
durch einfaches hochzaehlen und hinten anhaengen.
Sowas braucht man laufend denke ich...
Quote
man kann sowas in perl sogar machen, aber so ziemlich jeder halbwegs
erfahrene programmierer wird dir davon abraten. macht nur ärger.

Kannst du mir bitte verraten wie?
esskar
 2006-05-21 14:41
#66372 #66372
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=nikster77,21.05.2006, 12:25]Sowas braucht man laufend denke ich...[/quote]
nein, braucht man nie
schreib sie in ein array.
dann kannst du nämlich mittels
$array[1] drauf zugreifen.
nikster77
 2006-05-21 15:21
#66373 #66373
User since
2006-02-08
26 Artikel
BenutzerIn
[default_avatar]
Ich wuerde aber gerne jede dieser Variablen wieder in ein eigenes Array schreiben...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
my @temp = ();

open(TEXT, "/home/nikster/supertext") || die "Unable to read from supertext : $!";
while(<TEXT>)
{
if ($_ =~ m/^hallo/ig) {
push @text, (split m/[:\[\]]/, $_);
}
}
close (TEXT);


Jetzt habe ich alle Textzeilen in einem Array und kann sie auch per $text[xy] aufrufen.

Aber wie schreibe ich jede Zeile in ein eigenes Array?
Code: (dl )
1
2
3
4
for ($i <= $#text) {
$i += 1;
push @temp, ($text[$i]);
}


bringt nichts weil ich dann alles wieder in einem Array hab, bzw. eigentlich nur die letzte Zeile.
Ich muesste also ein eigenes Array fuer jede Zeile anlegen...
womit ich wieder beim hochzaehlen waere.\n\n

<!--EDIT|nikster77|1148210750-->
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2006-05-21 03:58.