Schrift
[thread]8900[/thread]

Datei einlesen und Array und Strings bearbeiten: Datei einlesen und Array und Strings bea

Leser: 3


<< >> 7 Einträge, 1 Seite
perl-anfaenger
 2007-04-03 17:29
#75635 #75635
User since
2007-01-22
7 Artikel
BenutzerIn
[default_avatar]
Hallo community,

ich habe da mal wieder ein kleines Problem.

Es geht um die Auswertung einer Datei
Status.dat sie ist wiefolge aufgebaut
Code: (dl )
1
2
3
4
beschreibung,prozent ok,prozent warning, prozent critical, total avail
Test,90%,5%,5%
Test1,90%,5%,5%
Test2,90%,5%,5%

Diese Datei lese ich in ein Array ein.
Benötigte Arrays speichere ich in einen String ab
die String werden nach dem Komma gesplittet und in ein Array geschrieben.
Damit würde der Array für den String Test wiefolgt aussehen
Array[0]=Test
Array[1]=90%
Array[2]=5%
Array[3]=5%

diese Daten schreibe ich in eine Ausgabedatei.

Soweit sogut. Nur meine Ausgabedatei ist immer leer perl bleibt auch bei keinem Fehler stehen bin echt ratlos und um jeden Tipp dankbar.

Anbei mein 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/perl
use strict;
use warnings;

#Öffnen der Datei status.dat
open(DATEI, '< status1.dat');

#Auslesen des Inhaltes der Datei in den Array @inhalt
my @inhalt = <DATEI>;

#Schliessen der Datei
close(DATEI);

#Beschreibung 1. Zeile einlesen
my $beschreibung = @inhalt[0];

#Oracle 3. Zeile einlesen
my $oracle = @inhalt[2];

#Evi 3. Zeile einlesen
my $evi = @inhalt[2];

#Groupware 13. Zeile einlesen
my $group = @inhalt[12];

#Active Directory 17. Zeile einlesen
my $acdi = @inhalt[16];

#SAP 22. Zeile einlesen
my $sap = @inhalt[21];

#Netzinfo 23. Zeile einlesen
my $isu = @inhalt[22];

#Netzinfo 21. Zeile einlesen
my $netzinfo = @inhalt[20];


#Bei jedem Komma splitten
@satz1=split(/\,/,$beschreibung);
print join("\n",@satz1);

@satz2=split(/\,/,$oracle);
print join("\n",@satz2);

@satz3=split(/\,/,$evi);
print join("\n",@satz3);

@satz4=split(/\,/,$group);
print join("\n",@satz4);

@satz5=split(/\,/,$acdi);
print join("\n",@satz5);

@satz6=split(/\,/,$netzinfo);
print join("\n",@satz6);

@satz7=split(/\,/,$sap);
print join("\n",@satz7);

@satz8=split(/\,/,$isu);
print join("\n",@satz8);


#Ausgabedatei erzeugen und öffnen
open(DATEIA,'>> trend.csv');

#Schreibe der Sammelausgabe in die Datei Ausgabe
print DATEIA
satz1[0]";"satz1[1]"\n"
satz2[0]";"satz1[1]"\n"
satz3[0]";"satz1[1]"\n"
satz4[0]";"satz1[1]"\n"
satz5[0]";"satz1[1]"\n"
satz6[0]";"satz1[1]"\n"
satz7[0]";"satz1[1]"\n"
satz8[0]";"satz1[1]"\n";

#Schließen der Datei
close (DATEIA);


Danke

Der Anfänger
renee
 2007-04-03 17:41
#75636 #75636
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein paar allgemeine Anmerkungen:

*) Verwende lexikalische Dateihandles: open my $fh,'>> trend.csv' ;
*) Verwende am Besten die 3-Arg-Form von open, also open my $fh,'>>', 'trend.csv' ;
*) Du solltest Fehlerbehandlung machen. Zum Beispiel bei open aus open my $fh,'>>','trend.csv' ; das hier machen open my $fh,'>>','trend.csv' or die $!;
*) Elemente eines Arrays spricht man so an: $array[$index], also aus dem @ ein $ machen.
*) Anstatt split und join kannst Du einfach auch alles ersetzen.
*) Konkatenationen von Strings geht mit . Also aus
Code: (dl )
1
2
3
4
5
6
7
8
satz1[0]";"satz1[1]"\n"
satz2[0]";"satz1[1]"\n"
satz3[0]";"satz1[1]"\n"
satz4[0]";"satz1[1]"\n"
satz5[0]";"satz1[1]"\n"
satz6[0]";"satz1[1]"\n"
satz7[0]";"satz1[1]"\n"
satz8[0]";"satz1[1]"\n";
ein
Code: (dl )
1
2
3
4
5
6
7
8
9
print DATEIA 
$satz1[0].";".$satz1[1]."\n".
$satz2[0].";".$satz1[1]."\n".
$satz3[0].";".$satz1[1]."\n".
$satz4[0].";".$satz1[1]."\n".
$satz5[0].";".$satz1[1]."\n".
$satz6[0].";".$satz1[1]."\n".
$satz7[0].";".$satz1[1]."\n".
$satz8[0].";".$satz1[1]."\n";
machen.

Man kann print auch mit einer Liste als Argument aufrufen. Du könntest also auch
Code: (dl )
1
2
3
4
5
6
7
8
9
print DATEIA 
$satz1[0],";",$satz1[1],"\n",
$satz2[0],";",$satz1[1],"\n",
$satz3[0],";",$satz1[1],"\n",
$satz4[0],";",$satz1[1],"\n",
$satz5[0],";",$satz1[1],"\n",
$satz6[0],";",$satz1[1],"\n",
$satz7[0],";",$satz1[1],"\n",
$satz8[0],";",$satz1[1],"\n";
machen.\n\n

<!--EDIT|renee|1175608901-->
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/
PerlProfi
 2007-04-03 17:54
#75637 #75637
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Irgendwie sehe ich keine $-Zeichen beim letzten print(), liegt das an meinem Browser, oder darf man die dort weglassen?
renee
 2007-04-03 18:00
#75638 #75638
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, natürlich nicht. Man muss die $ immer schreiben...

Ist mir auch nicht aufgefallen...
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/
perl-anfaenger
 2007-04-03 18:04
#75639 #75639
User since
2007-01-22
7 Artikel
BenutzerIn
[default_avatar]
Erstmal vielen Dank für die Anmerkungen ich werde sie heute noch umsetzen.

Bei weiteren Probleme melde ich mich wie immer wieder

Der Anfänger
renee
 2007-04-03 18:16
#75640 #75640
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vergiss meinen Punkt mit split/join/ersetzen...

Als ich das geschrieben habe, hatte ich nicht bemerkt, dass Du die Arrays ja noch brauchst...
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/
Ronnie
 2007-04-03 18:27
#75641 #75641
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Du könntest auch alles in einen Hash zwischenspeichern. Wie ich sehe benötigst du ja eine gewisse Ordnung -> Zeile 21 nach Zeile 22 und 23. Folgendes Beispiel ist wahrscheinlich jetzt zu komplex, aber evtl. trotzdem als Anregung gut:
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
48
#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

my %rows;
my @wanted = (1, 3, 13 ,17, 22, 23, 21);

#open(FILE, '<', 'status1.dat') or die $!;
while (my $line = <DATA>) {
chomp $line;
$rows{$.} = [split /\,/, $line] if (grep {$_ == $.} @wanted);
}
#close(FILE) or die $!;

warn Dumper \%rows;

#open(OUT, '>>', 'trend.csv') or die $!;
#print OUT join "\n", map {join ';', @{$rows{$_}}[0,1]} @wanted;
print join "\n", map {join ';', @{$rows{$_}}[0,1]} @wanted;
#close(OUT) or die $!;

__DATA__
1,A,C
2,B
3,C,DELTA
4,D
5,E
6,F
7,G
8,H
9,I
10,AJ
11,AA
12,AB
13,AC
14,AD
15,AE
16,AF
17,AG
18,AH
19,AI
20,BJ
21,BA
22,BB
23,BC
24,BD
<< >> 7 Einträge, 1 Seite



View all threads created 2007-04-03 17:29.