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

Array wird dreimal ausgegeben?!



<< >> 4 Einträge, 1 Seite
yasukatakaya
 2008-04-29 12:15
#108973 #108973
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
Moinsen,
ich wollte einmal fragen, wieso mein array @alleTestschritte im script drei mal ausgegeben wird, und erst bei der dritten ausgabe, das ausgegeben wird, was ich suche, d.h. die ersten male wird einfach der gesamte array ausgegeben, wo noch keine nullen eingefügt sind?!

Hier ist der Code:
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
$pfadDerDateien = "C:/Desktop/testfts2";

$pfadDerAusgabeDatei = "C:/Desktop";

@alleTestschritte = ('Board selected A300',
'Check SerialNumber length 10 Char',
'Check SerialNumber',
'VCC20_GND_resitor',
'VCC3_GND_resitor',
'VCC5_GND_resitor',
'Current_Consumption_Start_Up',
'VCC20_On_Voltage',
'VCC3_On_Voltage',
'VCC5_On_Voltage',
'VCC1V6_On_Voltage 39.Sign290',
'VCC1V8_On_Voltage P1497')

opendir(DIR,$pfadDerDateien);
while($datei = readdir(DIR))
{
for($i=0;$i<@alleTestschritte;$i++)
{
open (in2,'<',"$pfadDerDateien/$datei");
open (OUTPUT2,">>$pfadDerAusgabeDatei/FTS2-AATH329324-Datei.txt") or die "konnte $ziel nicht oeffnen,$!\n";

while(<in2>)
{
($testschritt3) = $_ =~ /(.*?)\|.*?\|.*?\|.*?\|.*?\|.*?\n/gsm;

if(@alleTestschritte[$i] eq $testschritt3)
{
@alleTestschritte[$i] = '0';
}
}
}

for($ii=0;$ii<@alleTestschritte;$ii++)
{
print OUTPUT2 "@alleTestschritte[$ii]\n";
print OUTPUT2 $ii;
}

print OUTPUT2 "|||\n";

close(FILE);
}
closedir(DIR);
renee
 2008-04-29 12:50
#108976 #108976
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da einige Informationen fehlen (wie viele Dateien in dem Ordner sind, was Du eigentlich sehen willst, welches Perl Du verwendest), ist es schwer was genaues zu sagen.

Aber ein paar allgemeine Hinweise:

- Einzelne Elemente eines Arrays spricht man mit $array[$index] und *nicht* mit @array[$index] an
- Du solltest Fehlerbehandlung auch beim opendir machen
- Warum machst Du innerhalb der ersten for-Schleife das open( OUTPUT2,...)? Den Filehandle verwendest Du doch sowieso erst später
- Du solltest Wiki:use strict und use warnings verwenden.
- statt for($i = 0; $i < @array; $i++ ){ my $element = $array[$i] } kannst Du auch for my $element ( @array ){} schreiben. Dann iterierst Du direkt über die Elemente und musst nicht mit dem Index arbeiten.
- Wenn Du doch den Index noch für etwas anderes verwendest wie in der zweite Schleife kannst Du auch einfach for my $i ( 0.. $#array ){} verwenden.

Und als kleiner Hinweis wo Dein Fehler liegen könnte: Du gibst für jede Datei das Array aus (da Du die Ausgabe innerhalb der while-Schleife machst)...
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/
nepos
 2008-04-29 12:50
#108977 #108977
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Bitte use strict; und use warnings; benutzen!
Bei Zugriffen auf einzelne Elemente des Arrays schreibt man kein @ sondern $:
Code: (dl )
$alleTestschritte[$ii]
yasukatakaya
 2008-04-29 14:05
#108988 #108988
User since
2007-05-31
68 Artikel
BenutzerIn
[default_avatar]
Danke Jungs genau das war es mit den $ statt @!
<< >> 4 Einträge, 1 Seite



View all threads created 2008-04-29 12:15.