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

Zeichenkette in Datei suchen



<< >> 3 Einträge, 1 Seite
dschingis
 2007-10-15 16:19
#100849 #100849
User since
2007-10-15
5 Artikel
BenutzerIn
[default_avatar]
Zum ersten Posting erstmal ein HALLO an alle!!!

Ich bin recht neu im Thema Programierung, brauche dies allerdings um mir das eine oder andere der täglichen Arbeit zu erleichtern. Aus diesem Grund binich jetzt hier gelandet um ein wenig Hilfe zu bekommen.

Ich möchte in einer Datei eine bestimmte Zeichenkette suchen. Wird diese gefunden soll er mir ein true geben, sonnst ein false.
Ich hab mir ein Grundgerüst gebaut mit dem ich dies machen will, aber irgendwie klappt das nicht, bzw. mir fehlt noch etwas Grundwissen um es auf die Reihe zu bekommen.

Hier mal mein Anfang:

Code (perl): (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
#!/usr/bin/perl

# Suchdatei
$logfile = "/root/install.log";

# Suchstrings
$esx301 = "Installing VMware-esx-3.0.1-32039.i386.";
$esx302 = "Installing VMware-esx-3.0.2-52542.i386.";
$centOS = "centos-release - 10:5-0.0.el5.centos.2.i386 installieren";

#Suchdatei oeffnen und in Array kopieren
open(HANDLE,"<$logfile") or die "Die Datei $logfile konnte nicht geoeffnet werden! Fehler: $!";
@file=<HANDLE>;
close(HANDLE) or die "Die Datei $logfile konnte nicht geoeffnet werden! Fehler: $!";

#Zeilenweiser Vergleich nach Suchstring
        chomp(@file);
        foreach $line (@file)
        {
                if((chomp($line)) = $esx301)
                {
                        print "ESX 3.0.1 gefunden";
                }
                elsif((chomp($line)) = $esx302)
                {
                        print "ESX 3.0.2 gefunden";
                }
                elsif((chomp($line)) = $centOS)
                {
                        print "CentOS gefunden";
                }
                else
                {
                        print "Keine gueltige OS Version gefunden!!!"
                }
        }


Mein Gedankengang:
Er soll zeilenweise durch die eingelesene Datei suchen.
Findet er den ersten String, soll die erste ausgabe erfolgen.
Findet er den zweiten String, soll die zweite Ausgabe erfolgen. ...
Findet er nichts davon, soll er die letzte Ausgabe machen und beenden.
Die letzte Ausgabe soll allerdings erst kommen wenn er die Datei (das Array) fertig durchsucht hat und keine Zeile mehr übrig ist ... wäre wünschenswert.

Kann mir hier mal jemand einen Gedankenanstoß geben um mich auf die Richtige Spur zu bringen?
Ihr sollt mir das ja nicht schreiben, nur ein paar Tipps das ich richtig suche ... ich will ja was dabei lernen!

Gruß und Danke
Dschingis
dschingis
 2007-10-15 16:22
#100850 #100850
User since
2007-10-15
5 Artikel
BenutzerIn
[default_avatar]
OK, wenn man lange genug testet klappt es.

Hier mein Ergebniss ... es funktioniert soweit recht gut:

Code (perl): (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
#!/usr/bin/perl -w

# Suchstrings (ESX Versionen)
$esx301 = "Installing VMware-esx-3.0.1-32039.i386.";
$esx302 = "Installing VMware-esx-3.0.2-52542.i386.";

# Suchdatei
$logfile = "/root/install.log";

#Suchdatei oeffnen und in Array kopieren
open(HANDLE,"<$logfile") or die "Die Datei $logfile konnte nicht geoeffnet werden! Fehler: $!";
@file1 = <HANDLE>;
close(HANDLE) or die "Die Datei $logfile konnte nicht geschlossen werden! Fehler: $!";

#Zeilenweiser Vergleich nach Suchstring
        chomp(@file1);
        foreach $line (@file1)
        {
                if($line eq $esx301)
                {
                        print "ESX 3.0.1 gefunden\n";

                        #Patche für ESX 3.0.1 werden installiert
                        last;
                }

                elsif($line eq $esx302)
                {
                        print "ESX 3.0.2 gefunden\n";

                        #Patche für ESX 3.0.2 werden installiert
                        last;
                }
                else
                {
                        print ".";
                }
        }

print "\n\nDie Installation ist beendet. Bitte rebooten Sie das System.\n\n";


Falls jedoch noch jemand gute Tipps hat was ich verbessern könnte oder wo man nachbessern könnte ... ich bin für gute Tipps immer offen.

Gruss
Dschingis
pq
 2007-10-15 16:35
#100851 #100851
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
guck mal bitte in die forums-übersicht - du hast schon eine menge antworten bekommen:

http://board.perl-community.de/thread/10582/
http://board.perl-community.de/thread/10578/
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
<< >> 3 Einträge, 1 Seite



View all threads created 2007-10-15 16:19.