Schrift
[thread]216[/thread]

Datei öffnen, nach String suchen



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
piero
 2004-04-01 16:31
#1766 #1766
User since
2004-03-03
98 Artikel
BenutzerIn
[default_avatar]
Hallo,
ist es möglich in Perl in einer Datei zu suchen und den Wert mit einem String zu vergleichen und diesen in eine Variable zu schreiben?
z.B.
ich will die Datei "hosts" öffnen. Hier steht folgendes:

127.0.0.50 Sepp

Jetzt will ich die lokale IP-Adresse auslesen und in der Datei "hosts" nach der IP-Adresse suchen. Dann soll er mir "Sepp" in die Variable Namen schreiben.

Ist dies zu realisieren?

--
Gruß
Piero
renee
 2004-04-01 16:39
#1767 #1767
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
open(R_HOSTS,"<$host_file") or die $!;
while(my $line = <R_HOSTS>){
chomp $line; # Zeilenumbruch entfernen
if($line =~ /^$ip/){ # wenn die Zeile mit der IP beginnt
$name = (split(/\s+/,$line))[1]; # Der Name ist durch ein od. mehrere Leerzeichen von der IP getrennt
}
}
close R_HOSTS;
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/
piero
 2004-04-01 16:43
#1768 #1768
User since
2004-03-03
98 Artikel
BenutzerIn
[default_avatar]
und über diesen befehl, bekomme ich ja die ip-adresse heraus, oder?
$ENV{'REMOTE_ADDR'}

d.h. es muss also folgendermaßen alles heißen, oder?:

Code: (dl )
1
2
3
4
5
6
7
8
9
$ENV{'REMOTE_ADDR'};
open(R_HOSTS,"<$host_file") or die $!;
while(my $line = <R_HOSTS>){
chomp $line; # Zeilenumbruch entfernen
if($line =~ /^$ip/){ # wenn die Zeile mit der IP beginnt
  $name = (split(/\s+/,$line))[1]; # Der Name ist durch ein od. mehrere Leerzeichen von der IP getrennt
}
}
close R_HOSTS;


Edit by Erik: Code Tags eingefügt!\n\n

<!--EDIT|[E|B]|1080825694-->
renee
 2004-04-01 16:55
#1769 #1769
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
das muss my $ip = $ENV{'REMOTE_ADDR'}; heißen...  $name solltest Du auch schon vor der while{}-Schleife deklarieren...

Man muss aber auch bedenken, wenn man sowas macht, dass $ENV{'REMOTE_ADDR'} nicht immer übermittelt wird!\n\n

<!--EDIT|renee|1080824190-->
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/
piero
 2004-04-01 17:05
#1770 #1770
User since
2004-03-03
98 Artikel
BenutzerIn
[default_avatar]
Hallo,
wenn ich folgenden Code ausführe, dann kommen nur lauter error Meldungen, obwohl ich es so gemacht habe, wie ihr es mir gesagt habt.

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
#!/usr/bin/perl -w                                 
                                                 
use MIME::Base64;                                  
use strict;                                        
use warnings;                                      
use CGI;                                          
use CGI::Carp qw(fatalsToBrowser);                
                                                 
open(M, "|/usr/sbin/sendmail -t");                
                                                 
print M "To: Piero <gior\@imap>\n";                
                                                 
print M "From: $ABSENDER <$ABSENDER\@blabla.de>\n";
                                                 
print M "Subject: Test\n";                        
                                                 
print M "Content-type: text/html\n\n";            
                                                 
my ($Feld, $Name, $Wert);                          
my %Formular;                                      
                                                 
my $cgi=CGI->new();                                
print $cgi->header(-type=>'text/html');            
%Formular=$cgi->Vars();                                                        
                                                                               
$ip = $ENV{'REMOTE_ADDR'};                                                      
open(ABSENDER,"hosts) or die $!;                                                
while(my $line = <ABSENDER>) {                                                  
chomp $line; #Zeilenumbruch entfernen                                          
if($line =~ /^$ip/) { #wenn die Zeile mit der IP beginnt                      
$name = (split (/\s+/,$line))[1]; # Der Name ist durch ein oder mehrere Leerzeichen von der IP getrennt                                                        
}                                                                              
}                                                                              
close ABSENDER;


Edit by Erik: Code Tags eingefügt!\n\n

<!--EDIT|[E|B]|1080825549-->
[E|B]
 2004-04-01 17:20
#1771 #1771
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
An der Stelle des Scriptes würde ich auch ein paar Meldungen ausgeben. ;)
Du hast z.B. "strict" eingebunden, "$ip" berücksichtigst du nicht.

Nachtrag: Das sieht sehr nach einem LMHOST File aus... :)\n\n

<!--EDIT|[E|B]|1080825737-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
renee
 2004-04-01 17:21
#1772 #1772
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
und wo kommt $ABSENDER her??
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/
piero
 2004-04-01 17:22
#1773 #1773
User since
2004-03-03
98 Artikel
BenutzerIn
[default_avatar]
und was heißt das genau?
[E|B]
 2004-04-01 17:23
#1774 #1774
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Und wo kommt $name her?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
piero
 2004-04-01 17:25
#1775 #1775
User since
2004-03-03
98 Artikel
BenutzerIn
[default_avatar]
so hat es mir renee gesagt....
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2004-04-01 16:31.